Filenames

在沒有任何內容的文件中重命名非字母和數字字元

  • June 10, 2019

我在一個文件夾中有大量 .jpg 文件,其中包含非字母字元等! , ( ) ^ & .

我需要重命名文件,以便將任何不是A-Z a-z 0-9的內容替換為任何內容。此外,空格應替換-為也以 .mp4$$$.jpg 結尾的文件,這部分需要保持完整。

例如,如果文件被呼叫

ask me anything.mp4001.jpg
ask, me. anything! 2.mp4001.jpg

文件名應更改為

ask-me-anything.mp4001.jpg
ask-me-anything-2.mp4001.jpg

使用 bash,您可以這樣做:

for f in *.jpg
do
 if [[ $f =~ ^(.*)(\.mp[[:digit:]]+\.jpg) ]]
 then
   prefix=${BASH_REMATCH[1]}
   suffix=${BASH_REMATCH[2]}
   prefix=${prefix//[^[:alnum:] ]/}
   prefix=${prefix// /-}
   echo mv -- "$f" "${prefix}${suffix}"
 fi
done

這會遍歷*.jpg文件並嘗試將每個文件名與模式匹配: (anything) 後跟.mp(一個或多個數字) .jpg。如果文件名匹配,我們將其拆開進行重命名。後綴包含句點,因此我們將其單獨保存,以便去除前綴中的任何句點。在去掉任何不是字母數字或空格的內容後,我們將所有空格替換為破折號。然後為mv命令重建文件名;echo如果結果看起來正確,請刪除。

如果您希望在原始文件名中保留破折號,請將最後兩個prefix分配換成這些:

prefix=${prefix// /-}
prefix=${prefix//[^[:alnum:]-]/}

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