나는 이것을 시도했습니다 :
#!/bin/bash
# addsuffix <suffix> <files>
suffix=$1
shift
for f in "$@"
do
extension=${f##*.}
if [ -z $extension ]; then
mv "$f" "$f$suffix"
else
mv "$f" "${f%.$extension}$suffix.$extension"
fi
done
add_suffix가 이전 파일의 이름인 이 명령으로
sh add_suffix
하지만 오류가 발생합니다.
add_suffix: 5: shift: can't shift that many
뭐가 문제 야?
답변1
나는 쉘 스크립트에 무엇이 잘못되었는지에 대한 게시물 끝의 질문이 아니라 스레드의 질문에 대답하고 있습니다.
쉘 스크립트 외부에서 이 작업을 수행하려는 경우 mmv 명령을 사용하면 됩니다.
me@elman:~/test$ ls
file1 file1.out file2
me@elman:~/test$ mmv -n "*" "#1.newsuffix"
file1 -> file1.newsuffix
file1.out -> file1.out.newsuffix
file2 -> file2.newsuffix
'-n'은 mmv에게 수행할 작업을 표시하지만 실제로 실행하지는 않도록 지시합니다(모의 실행). 두 번째 매개변수("*")는 mmv에 변경할 파일(소스)을 알려줍니다. 더 복잡한 일치 패턴이 있을 수 있지만 이 명령은 디렉터리에서 숨겨지지 않은 모든 파일을 가져와야 합니다. 마지막 매개변수 "#1.newsuffix"(대상)에서 #1은 소스 사양의 첫 번째 와일드카드 일치를 참조하고 이를 새 이름에 복사합니다.
실제로 변경하려면 "-n"을 제거하십시오. 매뉴얼 페이지는 매우 훌륭합니다.