Tengo un directorio /var/tmp/abcque dice que tiene 4 archivos:
12345-ram-3e3r5-io9490-89adu9.csv
45434-dam-qwe35-to9490-43adu9.csv
11234-cam-yy3r5-ro9490-85adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
Quiero cambiar el nombre de todos los archivos CSV (encontrar todos los archivos y cambiarles el nombre) de la manera más breve posible (probablemente de una sola línea) para esto:
XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv

rename. Supongo que esto es de Larry Wallrename, delrenamepaquete en Debian y derivados (y IIRCprenameen sistemas de persuasión RedHat). Una herramienta muy útil.perl-renameen arch linuxverboseindicador, no muestra nada y no realiza los cambios de nombre de archivo, aunque la ruta actual tenga archivos con nombres similares a12345_foo.csv. ¿Tengo que realizar alguna tarea adicional para que funcione (actualmente en Fedora 30)? Es un enfoque más limpio que el bucle. ¡Gracias por adelantado!renameoprename? Ver mi comentario arriba.man {the command}enumera los autores al final.renamecomando completamente diferente ; ver unix.stackexchange.com/a/238862/135943Tratar:
Cómo funciona:
for f in *.csv; doEsto inicia un ciclo sobre todos los
*.csvarchivos.mv -i -- "$f" "XXXXX-${f#*-}"Esto cambia el nombre de los archivos como desee, preguntando interactivamente antes de sobrescribir cualquier archivo.
doneEsto marca el final del ciclo.
Ejemplo:
fuente
Me gustó el pequeño desafío que has publicado, así que aquí está mi solución. Supongo que todos sus archivos comienzan con 5 caracteres numéricos, así que use el comando de corte para reemplazar los archivos numéricos iniciales por "XXXXX".
A continuación, los archivos antes del comando.
Debajo, el comando one liner.
A continuación, los archivos después del comando.
¿Es eso lo que estás buscando? :)
Referencias
Recorriendo la salida del comando en bash
Subcadenas en bash
fuente
no need to fork a new process for each?cutes un binario separado (/usr/bin/cut) y su ejecución consume más recursos que el uso de complementos integrados de shellsin horquillas:
Cuando usa un bucle de shell, los
mvtenedores una vez por archivo. Elrenamecomando de Perl no.(El comando de cambio de nombre de Perl tiene algunas restricciones, pero en este caso específico esas restricciones no se aplican).
En cuanto al
renamecomando que se mostró anteriormente, sí, eso funciona, pero entonces tienes toda esa confusión entre dos tipos diferentes de cambio de nombre, etc. Si tienes el correcto, genial, pero si no, esto también funciona.Si no tiene el comando perl-rename y no puede instalarlo, simplemente puede hacer esto:
Como puede ver, esto usa la misma sustitución que se muestra en la respuesta superior. Por supuesto, el cambio de nombre de perl tiene otras campanas y silbatos (la respuesta principal
-nya se mencionó, luego está-0,-fy así sucesivamente), y cuanto más necesites, más deberías instalar eso en lugar de rodar el tuyo de esta manera .fuente
renamecomando ( respuesta principal , también usa Perl), por lo que tal vez debería agregar un poco más de explicación que simplemente "sin tenedores" a la respuesta.