Eu tenho a seguinte saída do comando find para localizar arquivos contendo yyy
o nome:
./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
Como eu renomearia todos os arquivos para que a string yyy
fosse substituída por zzz
?
Responder1
Você pode usarmanipulação de string bashpara conseguir o que deseja:
find PATH/PATTERN -exec bash -c 'mv "$0" "${0/yyy/zzz}"' {} \;
O -exec
switch executa o comando até o escaped ;
, onde {}
está o caminho do arquivo que está sendo tratado atualmente.
bash -c 'mv "$0" "${0/cix/stix}"' {}
passa esse caminho como um argumento para o bash, que move $0
(o primeiro argumento, por exemplo, ./plonetheme/xxx/yyy-logo.png
) para ${0/yyy/zzz}
(o primeiro argumento manipulado, por exemplo, ./plonetheme/xxx/zzz-logo.png
).
Responder2
Conforme descritoaqui, você pode usar -print0
e read -r -d''
:
find /path/to/files -type f -print0 | while IFS= read -r -d '' file; do
mv "$file" "${file/yyy/zzz}"
done