En algún directorio tengo muchos archivos llamados
...
DSC_0002
DSC_0005
DSC_0010
...
Quiero cambiar el nombre/renumerar archivos
ARCHIVO_0001
ARCHIVO_0002
...
Quizás necesitaré comenzar la numeración NO desde 0001
Respuesta1
Digamos que el directorio que contiene estos archivos es /ruta/al/dir,
el script que necesita se verá así:
start=1
cd "/path/to/dir"
for file in ./*;do
mv "${file}" "FILE_$(printf "%04d" $start)"
start=$((start+1))
done
Respuesta2
intentar
ls | awk '{printf "mv %s FILE_%04d\n",$0,NR ;} ' | bash
- asegúrese de que ningún archivo tenga nombres divertidos.
remove |
parte bash para tener una vista previa.- utilizar
NR+666
para comenzar en 667. - use
%02d
o%06d
para generar 01 o 000001 como figura.
Respuesta3
Puedes hacer algo como:
#!/bin/bash
Counter=${1:-1} # It will take the starting number as 1st parameter
WhichDir=${2:-.} # It will take the path as 2nd parameter
# We try to see if the directory exists and if you can go there
(cd "$WhichDir" 2>/dev/null) || { echo "# $WhichDir NOT FOUND " ; exit 1; }
cd "$WhichDir" # it exists and you can go there
shopt -s nullglob # see notes
for f in DSC_* # for all the files in this dir
do
New_Name=$(printf "FILE_%04d.jpg" $Counter)
# change .jpg in what you need
Counter=$(($Counter +1)) # increase the counter
echo "mv -i \"$f\" \"$New_Name\" " # the -i will prompt before overwrite
# mv -i "$f" "$New_Name" # uncomment this line to make it works
exit 0
Notas
- Cuando ustedjugarpuede
mv
ser peligroso. Puede sobrescribir archivos existentes. Puede mover/cambiar el nombre del directorio. Por lo tanto, es mejor realizar una verificación visual antes de ejecutar un script. Luego puedes canalizar su salida en un shell:
por ejemplo./Myscript.sh
, ¿está todo bien? En caso afirmativo, puede escribir./Myscript.sh | /bin/bash
(o puede modificarlo borrando el "eco" o el comentario en la siguiente línea). - Es mejor escribir
mv -i
: aparecerá un mensaje antes de sobrescribir Si no hay
DSC_*
archivos en el directorio actual, seshopt -s nullglob
evitarán errores de expansión.En generalno es seguro analizar elsalida de
ls
incluso si en su caso no debería ser un problema real, porque debería tener para los archivos el nombre estándar de la cámaraDSC_nnnn.jpg
.- Generalmente hay una extensión (tal vez
.jpg
o.tif
o.raw
)... cámbiala o bórrala en el script para adaptarla a tus necesidades.