Linux
將 2 個具有不同副檔名的相似文件重命名為第一個文件,但保留副檔名
我在同一目錄中有一組 .m4v 和 .srt 文件,但名稱僅匹配前 3 個字元。如何重命名 .srt 文件以匹配相應的 .m4v 文件(同時保留 .srt 副檔名)?
給定
.m4v
shell 變數中的一個名稱,通過修剪第一個空格並添加文件名後綴name
來獲得相應文件的名稱。.srt``$name``.srt
這是用
${name%% *}.srt
. 這將刪除最長的後綴字元串匹配*
,$name
然後添加.srt
到該結果的末尾。該
.srt
文件的新名稱是$name
,但.m4v
文件名後綴更改為.srt
.這是用
${name%.m4v}.srt
. 這將刪除(最短)後綴字元串匹配.m4v
,$name
然後添加.srt
到該結果的末尾。下面是一個循環,它使用上面的兩個參數替換來重命名每個
.srt
文件,給定.mv4
在目前目錄中找到的文件列表。該循環還讓您知道是否存在.m4v
沒有相應.srt
文件的文件,或者該.srt
文件的新名稱是否已經存在。for name in *.m4v; do if [ ! -e "${name%% *}.srt" ]; then printf 'Can not find .srt file for "%s"\n' "$name" continue elif [ -e "${name%.m4v}.srt" ]; then printf '.srt file for "%s" already exists\n' "$name" continue fi >&2 mv -- "${name%% *}.srt" "${name%.m4v}.srt" done