나는 다음과 같은 내용을 읽었습니다.일괄 이름 바꾸기, 접두사 변경내 파일을 사용해 보겠습니다.
Old
이 경우에는 제거하고 다음으로 교체하고 싶습니다 .New
테스트 파일
01. Old Name.txt
02. Old Name.txt
03. Old Name.txt
1번 시도
for f in *.txt
do
mv "$f" "New${f#Old}"
done
출력 1
New01. Old Name.txt
New02. Old Name.txt
New03. Old Name.txt
2번 시도
for i in *.txt
do
mv ${i} ${i/#Old/New}
done
출력 2(변경 없음)
user@linux:~$ for i in *.txt
> do
> mv ${i} ${i/#Old/New}
> done
mv: target 'Name.txt' is not a directory
mv: target 'Name.txt' is not a directory
mv: target 'Name.txt' is not a directory
user@linux:~$
내 솔루션에 어떤 문제가 있나요?
원하는 출력
01. New Name.txt
02. New Name.txt
03. New Name.txt
답변1
변수를 참조하세요. 또한 앞에
${i/Old/New}
파운드 기호(#
) 를 사용하지 마세요Old
.#
파일 이름의 시작 부분에서 일치가 시작되도록 강제 하지만 로 시작하는 파일이 없고Old
모두 로 시작합니다0
.$ touch "01. Old Name.txt" "02. Old Name.txt" "03. Old Name.txt" $ for i in *.txt ; do mv -v "$i" "${i/Old/New}" ; done renamed '01. Old Name.txt' -> '01. New Name.txt' renamed '02. Old Name.txt' -> '02. New Name.txt' renamed '03. Old Name.txt' -> '03. New Name.txt'
Perl
rename
유틸리티를 설치하고 사용합니다(예:sudo apt-get install rename
Debian 및 그 파생 제품). 이는 DIY 일괄 이름 변경보다 훨씬 낫습니다.