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"

mmvpero finalmente gracias arenameque 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
renameutil no es muy "estándar". Cada distribución se envía con unarenameherramienta diferente . Por ejemplo, aquí en Gentoo,renamees delsys-apps/util-linuxpaquete y no admite expresiones regulares.Hamish Downer sugirió
mmvque 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
qmvyqcpcomandos, 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/qcphará todo el cambio de nombre.Ambos
mmvyqmvson 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/renamepaquete, que le proporciona elrenamexmcambio 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.logda la salida correcta:
reemplazando el interruptor {-n} con {-v}
fuente
Creé un pequeño script bash para hacer esto:
fuente
lssalida 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:]'