Digamos que quiero cambiar el nombre de todos los archivos dentro de todas las subcarpetas de una carpeta de foo.txt a bar.txt usando zmv.
zmv '**/foo.txt' 'bar.txt' pero esto crea bar.txt en la carpeta raíz. ¿Cómo puedo mantener los archivos en su subcarpeta correspondiente?
Debe hacer referencia a la parte del directorio en el destino. Puede hacerlo poniendo los comodines entre paréntesis y usando $1 para referirse a la parte que coincide con el grupo entre paréntesis. El comodín ** es un poco especial y requiere que los paréntesis estén alrededor de **/ , ni más ni menos.
zmv '(**/)foo.txt' '${1}bar.txt' Puede usar el indicador -w para que cada comodín se convierta automáticamente en un grupo entre paréntesis.
zmv -w '**/foo.txt' '${1}bar.txt' O puede usar el indicador -W y usar comodines en el texto de reemplazo; con este indicador, los comodines en el texto de reemplazo se convierten en $1 , $2 , etc.
zmv -W '**/foo.txt' '**/bar.txt' Alternativamente, puede usar $f para referirse a la ruta de origen.
zmv '**/foo.txt' '$f:r.txt'