bash - varios - renombrar archivos masivamente
renombrar parte del nombre de archivo (6)
Esta pregunta ya tiene una respuesta aquí:
- Cambiar el nombre de varios archivos en Unix 20 respuestas
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á.
Tendrás que aprender a usar sed http://unixhelp.ed.ac.uk/CGI/man-cgi?sed
Y también para usar para que pueda recorrer las entradas de su archivo http://www.cyberciti.biz/faq/bash-for-loop/
Tu comando se verá más o menos así, no tengo un término a mi lado, así que no puedo consultar
for i in `dir` do mv $i `echo $i | sed ''/orig/new/g''`
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 .