Ist es möglich, Dateien nach Größe zu verschieben?
Wie:
mv /path/to/x /path/to/y
Wobei x und y Verzeichnisse sind. Allerdings werden kleinere Dateien zuerst verschoben. Oder größere Dateien zuerst.
Gibt es außerdem einen Grund, dies nicht zu tun?
Antwort1
Du könntest es so machen (ungetestet):
for file in `ls --sort=size /path/to/x/*`; do mv $file /path/to/y/; done
Sie können die Sortierung umkehren, indem Sie den Parameter --reverse zu ls hinzufügen. Wenn die Dateinamen Leerzeichen enthalten, müssen Sie möglicherweise $file in Anführungszeichen setzen:
... mv "$file" /path/to/y/ ...
Wenn die Dateinamen möglicherweise doppelte Anführungszeichen enthalten, stecken Sie in echten Schwierigkeiten.
Möglicherweise könnte auch Folgendes funktionieren, aber das hängt von der MV-Implementierung ab und funktioniert möglicherweise auch nicht bei sehr vielen Dateien (und es gibt immer noch Probleme mit Leerzeichen und/oder Anführungszeichen in Dateinamen):
mv `ls --sort=size /path/to/x/*` /path/to/y/
Sie fragen: „Gibt es einen Grund, dies nicht zu tun?“ Die Frage sollte umgekehrt sein. Gibt es einen Grund, dies zu tun? Wenn Sie einen Grund haben, dann tun Sie es.
Antwort2
Wenn Sie die Dateien verschiebeninnerhalb eines einzelnen Dateisystems, dann werden die Daten in den Dateien nicht verschoben - nur die Namen der Dateien werden zwischen den Verzeichnissen verschoben. So können Sie eine 10 Gigabyte große Datei sofort verschieben (innerhalb eines einzigen Dateisystems). Sich also die Mühe zu machen, die Größen aller Dateien herauszufinden, nur damit die kleinsten zuerst verschoben werden können, wäre (in diesem Fall) Zeitverschwendung.
Antwort3
Ein Grund, dies nicht zu tun, besteht darin, dass Sie vor dem Verschieben einen Index aller Dateien erstellen müssten. Ermitteln Sie dann die Größe aller dieser Dateien und sortieren Sie sie.VorSie können sogar mit dem Kopieren beginnen.
Und dann gibt es keine Garantie, dass der Zustand, den Sie vor dem Kopiervorgang berechnet haben, exakt derselbe istwährendder Kopiervorgang und ist somit sinnlos.