Shell
如果滿足某些條件,則遞歸移動文件
我有以下目錄樹:
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
組合對您來說很好用。