Cambiar el nombre de varios archivos que coinciden con la palabra clave de búsqueda de UNIX

Cambiar el nombre de varios archivos que coinciden con la palabra clave de búsqueda de UNIX

Tengo el siguiente resultado del comando buscar para buscar archivos que contengan yyyel 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 yyyse 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 -execinterruptor 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 -print0y read -r -d'':

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

información relacionada