Shell

如果滿足某些條件,則遞歸移動文件

  • December 16, 2014

我有以下目錄樹:

records/13/2014.12.16/00/05.mpg
records/13/2014.12.16/00/15.mpg
records/13/2014.12.16/01/05.mpg
records/13/2014.12.16/02/15.mpg
records/15/2014.12.14/05/25.mpg
etc.

我需要將*5.mpg其名稱中的每個文件重命名為*0.mpg. 例如:

mv records/13/2014.12.16/00/05.mpg records/13/2014.12.16/00/00.mpg
mv records/13/2014.12.16/00/15.mpg records/13/2014.12.16/00/10.mpg
mv records/15/2014.12.14/05/25.mpg records/15/2014.12.14/05/20.mpg
etc.

我知道我將不得不編寫一個 bash 腳本來做到這一點。不幸的是,我不擅長,這就是我向你尋求幫助的原因。我猜它必須進入每個目錄(遞歸部分)並移動該目錄中的每個文件,如果它的名稱包含*5.mpg.

只需遍歷所有*.5mpg文件並使用參數擴展的幫助來更改文件名:

for file in *5.mpg; do mv -- "$file" "${file%5.mpg}"0.mpg; done

要為不同的目錄設置 globstar 選項(在 bash 中),並另外使用命令或再次使用參數擴展shopt -s globstar獲取路徑組件。dirname

另一種解決方案:

find records -type f -iname '*.mpg' | xargs rename 5.mpg 0.mpg

由於您要重命名的所有文件都以 *5.mpg 結尾,所以這個find+rename組合對您來說很好用。

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