So dumm, dass ich ungeduldig das folgende Skript auf meinem 19.04-Server verwendet habe, um 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 <----
Zum Glück habe ich den Vorgang gestoppt (STRG + C), sobald ich bemerkte, dass er nicht wie beabsichtigt lief und nicht den gesamten Ordner durchlief.
Jetzt habe ich also diese Dateien A
und C
, die weniger als ein GB groß sind, und wie es aussieht, handelt es sich um ein EINZIGES Video.
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 denken, dass die Dateien nicht gelöscht werden?
Jede Hilfe geschätzt, danke :)
Bearbeiten: Die Dateien sind tatsächlich verschwunden, es bleibt nur die letzte zu schreibende Datei übrig. Es dauerte nur einige Zeit, bis die Informationen zur Datenträgerverwendung aktualisiert wurden. Moral der Geschichte, führen Sie Ihre Skripte zuvor auf Scheindateien aus!
mv "$file" "$dir/"
mit einem nachlaufenden /
; Wenn $dir
dies nicht der Fall ist, mv
wird ein Fehler angezeigt $file
, anstatt ihn in umzubenennen $dir
. Berücksichtigen Sie auch mv -i
und mv -n
. Und machen Sie immer eine mkdir -p
vor dem Umzug, für ein gutes Maß.
A
,B
und so weiter existierte , bevor das Skript ausgeführt wird ? Wenn nicht, haben Sie die Dateien einfach umbenannt. Alle Dateien, mit denen Namen begonnen habena
oderA
in die umbenannt wurdeA
, sodass nur die zuletzt umbenannte Datei erhalten bleibt, die anderen werden überschrieben. Das Aufrufen einer Variablendir
erstellt kein Verzeichnis!