Solución 1:
Solía escribir secuencias de comandos perl para hacer esto, hasta que descubrí el comando de cambio de nombre.
Acepta una expresión regular de perl para hacer el cambio de nombre:
para esto, acabo de escribir dos comandos:
rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *
rename 'y/A-Z/a-z/' *.log
Sin embargo, para algunas distribuciones, rename
no tiene esta funcionalidad (consulte su página de manual), y es posible que deba instalar perl-rename
o prename
.
Solución 2:
mmv es una utilidad estándar de Linux para mover/renombrar varios archivos. Está disponible en los repositorios para la mayoría de las distribuciones. Para su ejemplo anterior, podría hacer:
mmv '*-Log-*-*-*-NODATA.txt' '#l1.#4#3#2.log'
Para obtener más información, lea este artículo debaday o la página del manual.
Solución 3:
Como no tengo un comando de cambio de nombre, confío en esto:
for myfile in /my/folder/*; do
target=$(echo $myfile|sed -e 's/foo/bar/g')
mv "$myfile" "$target"
done
Solución 4:
rename
util no es muy "estándar". Cada distribución se envía con un rename
diferente herramienta. Por ejemplo, aquí en Gentoo, rename
es de sys-apps/util-linux
paquete y no es compatible con expresiones regulares.
Hamish Downer sugirió mmv
, parece útil, especialmente para usar dentro de scripts.
Por otro lado, para el caso general, es posible que desee cambiar el nombre de utils. Tiene qmv
y qcp
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
y qmv
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.