vez varios renombrar parte para nombre masivo masivamente lote diferente con como comando cambiar archivos ala bash filenames rename

bash - varios - renombrar archivos masivamente



renombrar parte del nombre de archivo (6)

Esta pregunta ya tiene una respuesta aquí:

lo siento por la pregunta propiamente estúpida, pero soy bastante novato. Tengo muchos archivos que se ven así:

DET01-ABC-5_50-001.dat ... DET01-ABC-5_50-0025.dat

y quiero que se vean así:

DET01-XYZ-5_50-001.dat ... DET01-XYZ-5_50-0025.dat

¿Cómo puedo hacer esto? Probé varias cosas en este foro, pero parece que cometí un error. ¡Gracias por tu ayuda!


Algo así lo hará. Es posible que el bucle for deba modificarse según los nombres de archivo que desee capturar.

for fspec1 in DET01-ABC-5_50-*.dat ; do fspec2=$(echo ${fspec1} | sed ''s/-ABC-/-XYZ-/'') mv ${fspec1} ${fspec2} done

Siempre debe probar estas secuencias de comandos en copias de sus datos, por cierto, y en directorios totalmente diferentes.


Hay un par de variantes de un comando de cambio de nombre, en su caso, puede ser tan simple como

rename ABC XYZ *.dat

Puede tener una versión que tome una expresión regular de Perl;

rename ''s/ABC/XYZ/'' *.dat


Me gusta hacer esto con sed En tu caso:

for x in DET01-*.dat; do echo $x | sed -r ''s/DET01-ABC-(.+)/.dat/mv -v "/0" "DET01-XYZ-/1.dat"/'' done | sh -e

Lo mejor es omitir la parte "sh-e" primero para ver qué se ejecutará.



Todas estas respuestas son simples y buenas. Sin embargo, siempre me gusta agregar un modo interactivo a estos scripts para que pueda encontrar falsos positivos.

if [[-n $ en Modo Interactivo]]
entonces
echo -e -n "$ oldFileName => $ newFileName / n¿Deseas hacer este cambio? [S / n]:"
leer correr

[[-z $ run || "$ run" == "y" || "$ run" == "Y"]] && mv "$ oldFileName" "$ newFileName"
fi

O haga que el modo interactivo sea el predeterminado y agregue un indicador de fuerza (-f | --force) para scripts automáticos o si se siente atrevido. Y esto no te frena demasiado: la respuesta predeterminada es "sí, quiero cambiar el nombre", así que puedes presionar la tecla Intro en cada aviso (debido a la ejecución `` -z $ / prueba.


for file in *.dat ; do mv $file ${file//ABC/XYZ} ; done

No se necesita rename ni sed . Solo bash de expansión de parámetros .