renombrar - linux cambiar extension a varios archivos
¿Cómo cambio el nombre de varios archivos que comienzan con una marca de tiempo de Unix? Problema de imapsync (1)
Intenta hacer esto con rename
:
$ rename -n ''s/^/d+/(stat($_))[9]/e'' [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*
desde el prompt de shell
Es muy útil, puedes poner algún código perl como lo hago en una sustitución por stat
con el modificador e
.
Puede eliminar el -n
(interruptor de modo de funcionamiento en seco) cuando sus pruebas se vuelvan válidas.
warning http://pix.toile-libre.org/upload/original/1377510865.png Hay otras herramientas con el mismo nombre que pueden o no ser capaces de hacer esto, así que ten cuidado.
Si ejecuta el siguiente comando ( linux
)
$ file $(readlink -f $(type -p rename))
y tienes un resultado como
.../rename: Perl script, ASCII text executable
y no contiene:
ELF
entonces esta parece ser la herramienta correcta =)
De lo contrario, para que sea el predeterminado (normalmente el caso) en Debian
y derivados como Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(reemplace /path/to/rename
el /path/to/rename
a la ruta del comando de perl''s rename
de su perl''s rename
.
Si no tiene este comando, busque en su administrador de paquetes para instalarlo o hacerlo manualmente
Por último, pero no menos importante, esta herramienta fue escrita originalmente por Larry Wall, el padre de Perl.
Editar
Como se indica aquí , si tiene el siguiente error:
Lista de argumentos demasiado larga
Luego usa find
esta manera:
find -type f -name ''[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*'' -print0|
xargs -0 -n1 rename -n ''s/^/d+/(stat($_))[9]/e''
( -n1
sin -n1
, eso debería funcionar también)
No obtuve el script de imapsync
para cambiar el nombre de los nombres de archivo maildir a trabajar. : - /
Entonces lo que necesito es:
Tengo una carpeta de correo con miles de correos. Después de importar esos correos electrónicos a mi nuevo servidor, el nombre de archivo de los correos electrónicos tiene la fecha de creación como una marca de tiempo Unix
en el nombre del archivo, pero el indicador de fecha de creación del archivo es la fecha de recepción correcta del correo electrónico.
ls -l para un archivo se ve así:
-rw-r--r-- 1 popuser popuser 1350432 2013-03-16 07:22 1363563215.M562903P29332V0000000000000802I0000000000AEA46B_527.my-domain.org,S=1350432:2,S
Entonces, lo que el script tiene que hacer es: 1) leer la fecha / hora de creación del archivo (encontré el comando
stat -c %y filename
Haz esto)
2) convertir la fecha / hora de 1) a una marca de tiempo de Unix
date -d "2013-03-17 11:19:01.000000000 +0100" "+%s"
3) elimine los primeros 10 dígitos (indicación de fecha y hora incorrecta) del nombre de archivo y nosotros la fecha y hora de 2) en su lugar
4) hacer esto para todos los archivos en un directorio específico
Soy un recién llegado en Linux
secuencias de comandos de Linux
, ¿alguien puede ayudarme con este script?
¡Gracias!