다음 파일이 있다고 가정해 보겠습니다.
essay.aux essay.out
essay.dvi essay.pdf
essay.fdb_latexmk essay.tex
essay.fls essay.toc
essay.log ......
이름을 다음과 같이 바꾸려면 어떻게 해야 합니까?
new_name.aux new_name.out
new_name.dvi new_name.pdf
new_name.fdb_latexmk new_name.tex
new_name.fls new_name.toc
new_name.log ......
문제는 이름이 다른 대신 확장자가 다르기 때문에 사용할 수 없다는 것입니다.이 문제. 그리고 저는 rename
명령어 가 없는 macOS를 사용하고 있습니다 .
답변1
이것이 제가 사용할 수 있었던 솔루션입니다:
#!/bin/bash
shopt -s nullglob
my_files='/root/temp/files'
old_name='essay'
new_name='new_name'
for file in "${my_files}/${old_name}"*; do
my_extension="${file##*.}"
mv "$file" "${my_files}/${new_name}.${my_extension}"
done
shopt -s nullglob
이렇게 하면 구문 분석된 디렉터리가 비어 있는 경우 오류가 발생하지 않습니다.
for file in "${my_files}/${old_name}"*; do
다음으로 끝나는 한 각 file
in을 반복합니다./root/temp/files/
essay
my_extension="${file##*.}"
이것은 무엇이든 탐욕스럽게 잘라낼 것입니다마지막 .
파일 이름에서 발견됨(확장자만 남겨두기를 바랍니다)
mv "$file" "${my_files}/${new_name}.${my_extension}"
확장자를 유지하면서 이전 파일을 새 파일 이름으로 이동합니다. (이름이 변경됨)
답변2
다음을 사용하여 찾을 수도 있습니다.
find . -name "essay.*" -exec sh -c 'mv $1 new_name.${1##*.}' rename {} \;
답변3
답변4
다음 명령을 사용하여 출력을 얻습니다.
먼저 for
모든 파일 확장자를 언급하는 for 루프를 사용한 다음 루프 내에서 awk
요구 사항에 따라 파일 이름을 바꾸는 명령을 사용했습니다.
테스트를 거쳐 잘 작동함
주문하다
for i in aux out dvi pdf fdb_latexmk tex fls toc; do find . -type f -iname "*.$i"| awk -F "./" '{print $2}' | awk -F "." '{print "mv" " " $1"."$2 " " "new_name."$2}'| sh; done