Tengo el siguiente resultado del comando buscar para buscar archivos que contengan yyy
el nombre:
./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
¿Cómo cambiaría el nombre de todos los archivos para que la cadena yyy
se reemplace con zzz
?
Respuesta1
Puedes usarmanipulación de cadenas de bashpara lograr lo que deseas:
find PATH/PATTERN -exec bash -c 'mv "$0" "${0/yyy/zzz}"' {} \;
El -exec
interruptor ejecuta el comando hasta el escape ;
, donde {}
está la ruta del archivo que se maneja actualmente.
bash -c 'mv "$0" "${0/cix/stix}"' {}
pasa esa ruta como argumento a bash, que mueve $0
(el primer argumento, por ejemplo, ./plonetheme/xxx/yyy-logo.png
) a ${0/yyy/zzz}
(el primer argumento manipulado, por ejemplo, ./plonetheme/xxx/zzz-logo.png
).
Respuesta2
Como se describeaquí, puedes usar -print0
y read -r -d''
:
find /path/to/files -type f -print0 | while IFS= read -r -d '' file; do
mv "$file" "${file/yyy/zzz}"
done