¿Cómo cambio el nombre de todos los archivos en un directorio, recursivamente, cambiando una extensión de archivo a otra, para miles de archivos en miles de subcarpetas? Veo muchos comandos que hacen casi lo que quiero, pero no del todo.
find . -name "*.andnav" -exec rename .andnav .tile {} \;
syntax error at (eval 1) line 1, near "."
...
rename -nv 's/\.andnav$/\.tile/i' *.andnav
0.png.andnav renamed as 0.png.tile
linux
command-line
file-management
rename
endolito
fuente
fuente
rename
o Red Hatrename
?Respuestas:
Lo averigué
por supuesto, elimine -v cuando lo haga realmente, o perderá tiempo mostrando todos los archivos
fuente
Algo como:
fuente
Con zsh:
Elimine el
-n
para realizar el cambio de nombre.fuente
Encontré que este método es más fácil y más fácil de leer:
Al menos en las derivaciones de Ubuntu, rename toma una lista de archivos de STDIN si no hay ninguno en la línea de comando. Y esto se puede probar fácilmente con:
hasta que lo hagas bien.
fuente
Renombrar archivos y directorios con
find -execdir | rename
Si va a cambiar el nombre de los archivos y directorios no simplemente con un sufijo, entonces este es un buen patrón:
La
-execdir
opción impresionante hace uncd
en el directorio antes de ejecutar elrename
comando, a diferencia de-exec
.-depth
asegúrese de que el cambio de nombre ocurra primero en los niños y luego en los padres, para evitar posibles problemas con la falta de directorios principales.-execdir
es necesario porque el cambio de nombre no funciona bien con las rutas de entrada que no son de nombre base, por ejemplo, lo siguiente falla:El
PATH
pirateo es obligatorio porque-execdir
tiene un inconveniente muy molesto:find
es extremadamente obstinado y se niega a hacer nada-execdir
si tiene alguna ruta relativa en suPATH
variable de entorno, por ejemplo./node_modules/.bin
, no:Ver también: /ubuntu/621132/why-using-the-execdir-action-is-insecure-for-directory-which-is-in-the-path/1109378#1109378
-execdir
es una extensión de búsqueda de GNU para POSIX .rename
está basado en Perl y proviene delrename
paquete. Probado en Ubuntu 18.10.Cambiar el nombre de la solución alternativa anticipada
Si sus rutas de entrada no provienen
find
, o si ha tenido suficiente de la molestia relativa de la ruta, podemos usar algunas anticipaciones de Perl para cambiar el nombre de los directorios de manera segura como en:No he encontrado un análogo conveniente para
-execdir
conxargs
: Xargs: ¿cambiar el directorio de trabajo a la ruta del archivo antes de ejecutar?Se
sort -r
requiere para garantizar que los archivos vengan después de sus respectivos directorios, ya que las rutas más largas vienen después de las más cortas con el mismo prefijo.fuente