Tengo un directorio /var/tmp/abc
que 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
, delrename
paquete en Debian y derivados (y IIRCprename
en sistemas de persuasión RedHat). Una herramienta muy útil.perl-rename
en arch linuxverbose
indicador, 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!rename
oprename
? Ver mi comentario arriba.man {the command}
enumera los autores al final.rename
comando completamente diferente ; ver unix.stackexchange.com/a/238862/135943Tratar:
Cómo funciona:
for f in *.csv; do
Esto inicia un ciclo sobre todos los
*.csv
archivos.mv -i -- "$f" "XXXXX-${f#*-}"
Esto cambia el nombre de los archivos como desee, preguntando interactivamente antes de sobrescribir cualquier archivo.
done
Esto 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
?cut
es 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
mv
tenedores una vez por archivo. Elrename
comando 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
rename
comando 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
-n
ya se mencionó, luego está-0
,-f
y así sucesivamente), y cuanto más necesites, más deberías instalar eso en lugar de rodar el tuyo de esta manera .fuente
rename
comando ( 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.