Shell-Script
如何重命名具有不同副檔名的文件
假設我有這些文件:
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 上。
這是我能夠開始工作的解決方案:
#!/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
以/root/temp/files/``essay
my_extension="${file##*.}"
這將貪婪地修剪文件名中最後
.
找到的任何內容(希望只留下副檔名)
mv "$file" "${my_files}/${new_name}.${my_extension}"
這會將舊文件移動到新文件名,同時保留副檔名。(改名)