2016-04-03 12 views
0

Ich versuche, alle Verzeichnisse weniger als 1 GB zu verschieben. Ich versuche, diesen Befehl zu verwenden:Verschieben Sie Verzeichnisse weniger als 1G

du -h -d 1 -t -1G | xargs -0 mv -it /destination/dir/ 

Aber ich erhalte eine Fehlermeldung:

mv: cannot stat [...] File name too long 

Hilfe wäre sehr dankbar :)

+0

versuchen Sie, '-L 1' zu xargs hinzuzufügen:' du -h -d 1 -t -1G | xargs -0 -L 1 mv -it/destination/dir/' – saeedgnu

+0

Danke :) Ich habe versucht mit' -L 1', aber das erzeugt die folgende Fehlermeldung, 'mv: kann nicht stat 'du -h -d 1 -t - 1G \ n ': Keine solche Datei oder Verzeichnis "Ich habe auch versucht mit' -n1', aber das gab mir auch eine Fehlermeldung 'mv: ungültige Option -' h'' – nimrag

Antwort

0

Also hier ist ein Workaround, der meine Bedürfnisse erfüllt. Vielleicht kann jemand es erweitern? Wie auch immer, wenn Sie sich nicht um Unterverzeichnisse kümmern müssen, dann funktioniert das Folgende.

du -Sb -t -1G | cut -f 2- | xargs -d "\n" mv -t /path/to/destination/ 
0

Ich bin mir nicht sicher, warum Sie verwenden Das Argument -0 lautet xargs, da dies angibt, dass die Dateinamen durch Leerzeichen und nicht durch Leerzeichen getrennt sind. Die Ausgabe von du enthält keine Nullbytes, sodass die gesamte Ausgabe als einzelner Dateiname behandelt wird, der den angezeigten Fehler verursacht.

Wie auch immer, würde ich vorschlagen, find mit:

find /path/to/source -type d -size -1024M -exec mv -it /path/to/destination {} + 

Wenn Sie zufrieden sind, dass du bereits produziert die Ausgabe, die Sie wollen und es stattdessen verwenden, können Sie den -0 Schalter hinzufügen, so dass es verwendet Null-Byte-Trennzeichen, dann sollte Ihr aktueller xargs Befehl funktionieren.

+0

Danke :) Leider bin ich völlig außerstande zu bekommen' finde mich meinem Willen beugen. Wenn ich einfach alles vor '-exec' abspiele, um die Ausgabe zu überprüfen, scheint es das '-Typ d'-Flag zu ignorieren und einfach jede Datei mit weniger als 1024M auszugeben. – nimrag

+0

Vielleicht können Sie einfach den '0' Schalter zu' du' hinzufügen (siehe mein Update). –

+0

Jetzt kommen wir ganz nah dran! Das einzige Problem ist, dass 'du' die Dir-Größen ausgibt, die an" mv "weitergeleitet werden und offensichtlich' mv' die Verzeichnisnamen nicht mehr erkennt. – nimrag

Verwandte Themen