Shell-Script

如何重命名具有不同副檔名的文件

  • February 5, 2018

假設我有這些文件:

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}"

這會將舊文件移動到新文件名,同時保留副檔名。(改名)

引用自:https://unix.stackexchange.com/questions/422017