У меня есть следующий вывод команды 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
Как описаноздесь, вы можете использовать -print0
и read -r -d''
:
find /path/to/files -type f -print0 | while IFS= read -r -d '' file; do
mv "$file" "${file/yyy/zzz}"
done