Linux

將 2 個具有不同副檔名的相似文件重命名為第一個文件,但保留副檔名

  • June 12, 2022

我在同一目錄中有一組 .m4v 和 .srt 文件,但名稱僅匹配前 3 個字元。如何重命名 .srt 文件以匹配相應的 .m4v 文件(同時保留 .srt 副檔名)?

在此處輸入圖像描述

給定.m4vshell 變數中的一個名稱,通過修剪第一個空格並添加文件名後綴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

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