Tenía un grupo de archivos que me gustaría cambiar constantemente de nombre, los archivos se llaman cosas como
"System-Log-01-01-2009-NODATA.txt"
"Something-Log-01-01-2009-NODATA.txt"
Y los quería como minúsculas, aaaammdd, extensión .log
"system.20090101.log"
"something.20090101.log"
mmv
pero finalmente gracias arename
que puedo usar el poder de la expresión regularperl-rename
.Como no tengo un comando para cambiar el nombre, confío en esto:
fuente
mmv es una utilidad estándar de Linux para mover / renombrar múltiples archivos. Está disponible en los repositorios para la mayoría de las distribuciones. Para su ejemplo anterior, podría hacer:
Para obtener más información, lea este artículo de debate o la página de manual .
fuente
rename
util no es muy "estándar". Cada distribución se envía con unarename
herramienta diferente . Por ejemplo, aquí en Gentoo,rename
es delsys-apps/util-linux
paquete y no admite expresiones regulares.Hamish Downer sugirió
mmv
que parece útil, especialmente para usar dentro de los scripts.Por otro lado, para el caso general, es posible que desee cambiar el nombre de los usos . Tiene
qmv
yqcp
comandos, que abrirán un editor de texto de su elección (mi preferencia: Vim) y le permitirán editar los nombres de archivo de destino allí. Después de guardar y cerrar el editor,qmv
/qcp
hará todo el cambio de nombre.Ambos
mmv
yqmv
son lo suficientemente inteligentes como para cambiar el nombre de los archivos en el orden correcto y también para detectar cambios de nombre circulares, y crearán automáticamente un archivo temporal si es necesario.fuente
sys-apps/rename
paquete, que le proporciona elrenamexm
cambio de nombre de expresiones regulares, así como mayúsculas / minúsculas en masa y otras cosas buenas.Para ser justo:
da esta salida:
Pero:
rename -n 's/(\w+)-\w+-(\d{2})-(\d{2})-(\d{4})-NODATA\.txt$/$1.$4$3$2\.log/' *.txt && rename 'y/A-Z/a-z/' System.20090101.log
da la salida correcta:
reemplazando el interruptor {-n} con {-v}
fuente
Creé un pequeño script bash para hacer esto:
fuente
ls
salida de análisis no es la mejor idea. Una búsqueda aleatoria sacó esta lectura larga en Unix. SE para tu diversión. El | Además, su respuesta coincidiría mejor con la pregunta con untr '[:upper:]' '[:lower:]'