不帶任何內容重命名文件中的非字母和數字字符

不帶任何內容重命名文件中的非字母和數字字符

我的資料夾中有大量 .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

答案1

使用 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。如果檔案名稱匹配,我們將其拆開進行重命名。後綴包含句點,因此我們將其單獨保存,以便去除前綴中的任何句點。刪除所有非字母數字或空格的內容後,我們用破折號取代所有空格。然後為命令重建檔案名稱mvecho如果結果看起來正確,請刪除。

如果您希望在原始檔案名稱中保留破折號,請將最後兩個分配替換prefix為以下內容:

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

相關內容