%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%AC%EB%9F%AC%20%ED%8C%8C%EC%9D%BC%20%EB%B3%B5%EC%82%AC%2F%EC%9D%B4%EB%A6%84%20%EB%B0%94%EA%BE%B8%EA%B8%B0.png)
"Assignment02.cc", "Assignment02.h", "Assignment02.txt" 등과 같은 패턴과 일치하는 파일 모음이 있습니다. 이 파일을 "Assignment03.cc", "Assignment03.txt"로 복사/이름 변경하고 싶습니다. h', '할당03.txt' 등
쉘 스크립트와 sed를 사용하는 것이 간단해야 한다고 생각합니다. 지금까지 나는 다음을 가지고 있습니다 :
OLD_NO=$1
NEW_NO=$2
echo "Moving from $OLD_NO to $NEW_NO"
for name in assignment$OLD_NO.* ; do
newname=$(echo $name | sed 's/\(.*\)$OLD_NO\(.*\)/\1xx$NEW_NO\2/')
echo "$name -> $newname"
# mv -v $name $newname
done
불행하게도 내가 sed를 호출하는 방식은 항상 입력 문자열을 반환 $name
하고 실제로 정규식 찾기/바꾸기를 수행하지 않습니다.
참고: 이 작업을 수행하는 명령을 인터넷에서 찾았 rename
지만 내 MacBook에서는 작동하지 않습니다.
답변1
여기서 sed를 사용하면 가치보다 더 복잡해집니다. 쉘에 내장된 텍스트 조작 기능을 사용하십시오. 예를 들어 ${name#assignment02}
접두사를 제거하십시오.assignment02
$name
for name in assignment02.*; do
mv "$name" "assignment03${name#assignment02}"
done
파일 이름에 쉘 특수 문자가 포함되어 있지 않다면 큰따옴표가 필요하지 않습니다.
zsh를 사용할 수 있는 경우 해당 zmv
기능은 이름 변경에 도움이 됩니다.
autoload zmv
zmv '(assignment)02.(*)' '${1}03.$2'
답변2
넌 이미 너무 복잡하게 생각했어
rename 02 03 *02*
'rename'은 arg3 또는 (*02*) 이후에 제공된 모든 파일 이름에서 첫 번째 인수('02')를 두 번째 인수('03')로 바꿉니다.
답변3
다른 접근 방식:
for ext in {cc,h,txt}
do
echo mv assignment02.$ext assignment03.$ext
done
장기적: "이름 바꾸기"를 시도해보세요
답변4
이를 수행할 수 있는 한 가지 방법은 다음과 같습니다.
ls -1 | sed "s/\(.*\)\..*$/mv '&' '\1.txt'/" | sh