Ich habe diesen riesigen Ordner mit Tausenden von ungeordneten Dateien. Ist es möglich, die ersten 5000 über den mv
Befehl in einen Unterordner zu verschieben ? Im Moment verschiebe ich Dateien mit
mv *some_pattern* ./subfolder1/
Momentan bewege ich Bilder ganz nach dem Zufallsprinzip. Es ist nicht wirklich wichtig, ob sich nicht genau 5000 Dateien in jedem Unterordner befinden. Gibt es einen besseren Weg, es zu tun?
shell
command-line
shell-script
wildcards
Fabinout
quelle
quelle
Antworten:
quelle
-
oder.
und geht davon aussubfolder1
, dass er nicht in dieser Liste aufgeführt ist.)$ sudo mv `ls | head -50000` 01/ sudo: unable to execute /bin/mv: Argument list too long
Mit
zsh
:Um bis zu 5000 normale Dateien in der Reihenfolge zu verschieben, in der sie sich im Verzeichnis befinden.
Für die ersten 5000 in der lexikografisch sortierten Liste:
Wenn Sie eine zu lange Fehlermeldung zu arg list erhalten . Sie können den Befehl
zsh
buitin verwenden,mv
indem Sie Folgendes eingeben :zuerst.
POSIXly:
quelle
Eine einfache Version, die Sonderzeichen, Leerzeichen usw. unterstützt.
Damit dies funktioniert,
dir2
muss es existieren und Sie müssen es aus dem übergeordneten Verzeichnis vondir1
und ausführendir2
.Dadurch werden 1000 Dateien von dir1 nach dir2 verschoben.
quelle
ls -Q -S dir1 | head -1000 | xargs -i mv dir1/{} dir2/
zum Verschieben von 1000 größten Dateien in dir1 (-S listet die Dateien nach Größe auf)ls -Q
keine Ausgabe erzeugt wird, die mitxargs
dem erwarteten Eingabeformat von kompatibel ist . Dies ist hilfreich für Dateinamen, die Leerzeichen enthalten, nicht jedoch für doppelte Anführungszeichen oder Backslashes. Dateinamen, die Steuerzeichen, einschließlich TAB, enthalten, können ebenfalls beschädigt werden.Möglicherweise müssen Sie Folgendes tun:
Dieses Skript funktioniert in bash, ksh, sh und mehreren UNIX-Varianten.
quelle
destination
selbst nicht in dieser ListeFühren Sie den folgenden Befehl aus
Im
find
Befehl.
kennzeichnet (Punkt) das aktuelle VerzeichnisFindet Dateien, die mit Hello beginnen und mit gz enden, werden die ersten 5000 Dateien in den Pfad verschoben
/data01/path/
quelle
Ich konnte einen Zug von 50.000 erfolgreich ausführen, ohne dass der mv bash-Fehler wie dieser auftrat
Komischerweise befand sich dies auf einer Samba-Freigabe, so dass das 50-KB-Limit darauf zurückzuführen ist, dass die GUI von Windows Explorer im Allgemeinen nicht mehr als 60 KB-Dateien in einem Verzeichnis mag.
quelle