Così stupido impaziente che ho usato il seguente script sul mio server 19.04 nel tentativo di spostare un mucchio di file video in cartelle con prefissi:
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
Non ho idea di dove sia andato storto, ma invece di spostare i file nelle cartelle è andato a un unico output .. quindi :
----> 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 <----
Per fortuna ho interrotto il processo (CTRL+C) non appena ho notato che non stava andando come previsto e non è passato attraverso l'intera cartella.
Quindi ora ho quei file A
e C
, che sono meno di un Gb e, a quanto pare, sono un SINGOLO video.
Ci sono 50 Gb non contabilizzati nell'utilizzo totale del disco della cartella stessa, ma lo spazio su disco complessivo del computer è rimasto lo stesso.
Mi fai pensare che i file non vengano eliminati?
Qualsiasi aiuto apprezzato, grazie 🙂
Modifica:i file sono effettivamente spariti, rimane solo l'ultimo file da scrivere, è bastato del tempo per aggiornare le informazioni sull'uso del disco.. morale della storia, esegui i tuoi script su file fittizi prima !
Risposta accettata:
Penso che questo sia il problema:avresti dovuto creare le directory A, B, C ... Z. Se l'hai fatto, il mv
comando avrebbe dovuto spostare i file in quelle directory.
Ma in caso contrario, il mv
il comando sposta i file in file con quei nomi, A, B, C ... e penso che questo sia quello che hai fatto.
Per rendere più sicuro lo script di shell, dovresti farlo creare le directory (se non sono già presenti) prima di iniziare lo spostamento.
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
Se vuoi che le cose diventino ancora più sicure, puoi anche usare mv
con il -i
opzione
-i, --interactive
prompt before overwrite