So dumm, ungeduldig, dass ich das folgende Skript auf meinem 19.04-Server verwendet habe, um zu versuchen, eine Reihe von Videodateien in Ordner mit Präfixen zu verschieben:
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
Keine Ahnung, wo es schief gelaufen ist, aber anstatt die Dateien in Ordner zu verschieben, ging es zu einer einzelnen Ausgabe.. also:
----> 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 <----
Glücklicherweise habe ich den Vorgang gestoppt (STRG+C), sobald ich bemerkte, dass er nicht wie beabsichtigt lief und nicht den gesamten Ordner durchging.
Jetzt habe ich also diese Dateien A
und C
, die weniger als ein GB groß sind und dem Anschein nach ein EINZELNES Video sind.
In der gesamten Festplattennutzung des Ordners selbst sind 50 GB nicht berücksichtigt, aber der gesamte Festplattenspeicher des Computers ist gleich geblieben.
Lassen Sie mich glauben, dass die Dateien nicht gelöscht werden?
Jede Hilfe ist willkommen, danke 🙂
Bearbeiten:Die Dateien sind tatsächlich weg, nur die letzte zu schreibende Datei bleibt übrig, es dauerte nur einige Zeit, bis die Informationen zur Verwendung der Festplatte aktualisiert wurden. Die Moral der Geschichte, führen Sie Ihre Skripte vorher mit Scheindateien aus !
Akzeptierte Antwort:
Ich denke, das ist das Problem:Sie sollten die Verzeichnisse A, B, C … Z erstellt haben. Wenn ja, die mv
Befehl hätte die Dateien in diese Verzeichnisse verschieben sollen.
Aber wenn nicht, die mv
Befehl verschiebt die Dateien in Dateien mit diesen Namen, A, B, C … und ich denke, das haben Sie getan.
Um das Shellscript sicherer zu machen, sollten Sie es die Verzeichnisse erstellen lassen (falls sie nicht bereits vorhanden sind), bevor Sie mit dem Verschieben beginnen.
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
Wenn es noch sicherer werden soll, können Sie auch mv
verwenden mit dem -i
Möglichkeit
-i, --interactive
prompt before overwrite