find . -depth -name '*[A-Z]*'|sed -n 's/\(.*\/\)\(.*\)/mv -n -v -T \1\2 \1\L\2/p'|sh
No he probado los scripts más elaborados que se mencionan aquí, pero ninguna de las versiones de línea de comandos me funcionó en mi Synology NAS. renameno está disponible, y muchas de las variaciones de findfalla porque parece quedarse con el nombre anterior de la ruta ya renombrada (por ejemplo, si encuentra ./FOOseguido ./FOO/BAR, renombrar ./FOOa ./foocontinuará en la lista ./FOO/BARaunque esa ruta ya no sea válida) . El comando anterior funcionó para mí sin ningún problema.
Lo que sigue es una explicación de cada parte del comando:
find . -depth -name '*[A-Z]*'
Esto buscará cualquier archivo del directorio actual (cambie .a cualquier directorio que desee procesar), utilizando una búsqueda profunda (por ejemplo, aparecerá en la lista ./foo/barantes ./foo), pero solo para los archivos que contienen un carácter en mayúscula. El -namefiltro solo se aplica al nombre del archivo base, no a la ruta completa. Entonces esto aparecerá en la lista ./FOO/BARpero no ./FOO/bar. Esto está bien, ya que no queremos cambiar el nombre ./FOO/bar. Sin ./FOOembargo, queremos cambiar el nombre , pero ese aparece más adelante (por eso -depthes importante).
Este comando en sí mismo es particularmente útil para encontrar los archivos cuyo nombre desea cambiar en primer lugar. Use esto después del comando de cambio de nombre completo para buscar archivos que aún no se hayan reemplazado debido a colisiones o errores de nombre de archivo.
sed -n 's/\(.*\/\)\(.*\)/mv -n -v -T \1\2 \1\L\2/p'
Esta parte lee los archivos generados por findy los formatea en un mvcomando utilizando una expresión regular. La -nopción deja sedde imprimir la entrada, y el pcomando en la expresión regular de búsqueda y reemplazo genera el texto reemplazado.
La expresión regular en sí consta de dos capturas: la parte hasta el último / (que es el directorio del archivo) y el nombre del archivo en sí. El directorio se deja intacto, pero el nombre del archivo se transforma en minúsculas. Entonces, si findsale ./FOO/BAR, se convertirá mv -n -v -T ./FOO/BAR ./FOO/bar. La -nopción de mvasegura que los archivos minúsculos existentes no se sobrescriban. La -vopción realiza la mvsalida de cada cambio que realiza (o no realiza, si ./FOO/barya existe, genera algo como ./FOO/BAR -> ./FOO/BAR, señalando que no se ha realizado ningún cambio). El -Tes muy importante en este caso - que trata el archivo de destino como un directorio. Esto asegurará que ./FOO/BARno se traslade ./FOO/barsi ese directorio existe.
Use esto junto con findpara generar una lista de comandos que se ejecutarán (útil para verificar lo que se hará sin realmente hacerlo)
sh
Esto se explica por sí mismo. Enruta todos los mvcomandos generados al intérprete de shell. Puede reemplazarlo con basho cualquier caparazón de su agrado.
ABCdef,abcDEFyaBcDeF? ¿Debería el script renombrar abortar o simplemente advertir y continuar? 2. ¿Cómo define minúsculas para nombres que no sean ASCII de EE. UU.? Si tales nombres pueden estar presentes, ¿se debe verificar primero y excluir el pase? 3. Si está ejecutando una operación de cambio de nombre