重新命名與 UNIX find 關鍵字相符的多個文件

重新命名與 UNIX find 關鍵字相符的多個文件

我有以下 find 命令的輸出,用於查找yyy名稱中包含的檔案:

./plonetheme/xxx/yyy-logo.png
./plonetheme/xxx/profiles/default/plonetheme.yyy_various.txt
./plonetheme/xxx/skins/plonetheme_yyy_custom_images
./plonetheme/xxx/skins/plonetheme_yyy_custom_images/CONTENT.txt
./plonetheme/xxx/skins/plonetheme_yyy_custom_templates
./plonetheme/xxx/skins/plonetheme_yyy_custom_templates/CONTENT.txt
./plonetheme/xxx/skins/plonetheme_yyy_custom_templates/main_template.pt
./plonetheme/xxx/skins/plonetheme_yyy_styles
./plonetheme/xxx/skins/plonetheme_yyy_styles/base_properties.props
./plonetheme/xxx/skins/plonetheme_yyy_styles/CONTENT.txt

我如何重命名所有文件以便將字串yyy替換為zzz

答案1

您可以使用bash 字串操作實現你想要的:

find PATH/PATTERN -exec bash -c 'mv "$0" "${0/yyy/zzz}"' {} \;

開關-exec執行命令直至轉義;,其中{}是目前處理的檔案的路徑。

bash -c 'mv "$0" "${0/cix/stix}"' {}將該路徑作為參數傳遞給 bash,後者將$0(第一個參數,例如./plonetheme/xxx/yyy-logo.png)移動到${0/yyy/zzz}(第一個被操作的參數,例如./plonetheme/xxx/zzz-logo.png)。

答案2

如上所述這裡,您可以使用-print0read -r -d''

find /path/to/files -type f -print0 | while IFS= read -r -d '' file; do
    mv "$file" "${file/yyy/zzz}"
done

相關內容