Tan tonto impaciente que usé el siguiente script en mi servidor 19.04 en un intento de mover un montón de archivos de video a carpetas con prefijos:
dirs=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
shopt -s nocasematch
for file in *
do
for dir in "${dirs[@]}"
do
if [ -d "$file" ]; then
echo 'this is a dir, skipping'
break
else
if [[ $file =~ ^[$dir] ]]; then
echo "----> $file moves into -> $dir <----"
mv "$file" "$dir"
break
fi
fi
done
done
No tengo idea de dónde salió mal, pero en lugar de mover los archivos a las carpetas, fue a una salida singular... así que:
----> a1.ts moves into -> A <----
----> a2.ts moves into -> A <----
----> a3.ts moves into -> A <----
----> a4.ts moves into -> A <----
----> a5.ts moves into -> A <----
----> c1.ts moves into -> C <----
----> c2.ts moves into -> C <----
----> c3.ts moves into -> C <----
----> c4.ts moves into -> C <----
----> c5.ts moves into -> C <----
Por suerte, detuve el proceso (CTRL+C) tan pronto como me di cuenta de que no iba como se esperaba y no revisé toda la carpeta.
Así que ahora tengo esos archivos A
y C
, que son menos de un Gb, y por lo que parece son un video ÚNICO.
Hay 50 Gb sin contabilizar en el uso total del disco de la carpeta en sí, pero el espacio total en disco de la computadora sigue siendo el mismo.
¿Hacerme pensar que los archivos no se eliminaron?
Cualquier ayuda apreciada, gracias 🙂
Editar:los archivos desaparecieron, solo queda el último archivo que se escribió, todo lo que tomó fue algo de tiempo para que la información de uso del disco se actualizara. moraleja de la historia, ejecute sus scripts en archivos simulados antes !
Respuesta aceptada:
Creo que este es el problema:deberías haber creado los directorios A, B, C... Z. Si lo hiciste, el mv
El comando debería haber movido los archivos a esos directorios.
Pero si no, el mv
El comando mueve los archivos a archivos con esos nombres, A, B, C... y creo que esto es lo que hiciste.
Para hacer que el shellscript sea más seguro, debe hacer que cree los directorios (si aún no están allí) antes de comenzar a mover.
dirs=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
for dir in "${dirs[@]}"
do
mkdir -p $dir
done
Si desea que las cosas sean aún más seguras, también puede usar mv
con el -i
opción
-i, --interactive
prompt before overwrite