Bash

重命名具有相似名稱的數千個文件

  • March 9, 2019

我正在創建一個 bash 腳本來重命名我的文件。這些文件在同一個文件夾中,看起來都像這樣

1xxx_(一堆字元)=(一堆字元)=1234567890

現在我想要的是只留下最後一個 1234567890。基本上刪除從前面到第二次出現 = 的每個字元

您可以使用 shell 的參數擴展功能:特別是

${parameter#word}
${parameter##word}
      Remove matching prefix pattern.  The word is expanded to produce
      a pattern just as in pathname expansion.  If the pattern matches
      the  beginning of the value of parameter, then the result of the
      expansion is the expanded value of parameter with  the  shortest
      matching  pattern  (the ``#'' case) or the longest matching pat‐
      tern (the ``##'' case) deleted.

所以像

for file in *; do echo mv -- "$file" "${file##*=}"; done

(刪除echo如果它似乎做正確的事情)。


您可能面臨的一個問題是,刪除前綴後文件名可能變得不唯一。您可以選擇使用-nor--no-clobber選項跳過重命名這些案例mv

for file in *; do mv --no-clobber -- "$file" "${file##*=}"; done

或使用-bor--backup選項創建不同的備份:最直接

for file in *; do mv --backup=numbered -- "$file" "${file##*=}"; done

這將添加區分後綴.~1~.~2~依此類推。

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