重命名与 UNIX 查找关键字匹配的多个文件

重命名与 UNIX 查找关键字匹配的多个文件

我从 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

相关内容