CentOS 5.x.
Ich entschuldige mich, wenn dies eine Wiederholungsfrage ist. Ich habe viele ähnliche Fragen gesehen (bezüglich des Löschens von Dateien), aber nicht genau das gleiche Szenario.
Ich habe ein Verzeichnis mit Hunderttausenden von Dateien (möglicherweise über eine Million) und als kurzfristige Lösung für ein anderes Problem muss ich diese Dateien an einen anderen Speicherort verschieben.
Nehmen wir zum Zwecke der Diskussion an, dass sich diese Dateien ursprünglich befinden /home/foo/bulk/
und ich sie verschieben möchte/home/foo2/bulk2/
Wenn ich es versuche, mv /home/foo/bulk/* /home/foo2/bulk2/
erhalte ich den Fehler "zu viele Argumente".
Herr Google sagt mir, dass eine Alternative zum Löschen von Dateien in großen Mengen darin besteht, find auszuführen. Etwas wie: find . -name "*.pdf" -maxdepth 1 -print0 | xargs -0 rm
Das wäre in Ordnung, wenn ich etwas löschen würde, aber in diesem Fall möchte ich die Dateien verschieben ... Wenn ich so etwas wie find . -name "*" -maxdepth 1 -print0 | xargs -0 mv /home/foo2/bulk2/
bash eingebe, beschwert ich mich darüber, dass die Datei kein Verzeichnis ist.
Was ist der beste Befehl, um die Dateien in großen Mengen von einem Verzeichnis in ein anderes zu verschieben?
Betrachten
mv
Sie das übergeordnete Verzeichnis anstelle der Dateien:(Aber es kann Probleme verursachen, wenn
/home/foo/bulk
es in jedem Moment existieren muss.)quelle
mkdir
? Und was ist mit dem Dir, das in jedem Moment existiert oder nicht? Warum sollte dies die Dinge beschleunigen?mkdir
liegt daran, dass der gesamte Ordner und alles darin in das andere Verzeichnis verschoben wird und nicht mehr im alten Verzeichnis vorhanden ist. Es stellt sicher, dass das alte Verzeichnis noch vorhanden ist. Dies würde jedoch nicht ausreichen, wenn ständig ein Dienst ausgeführt würde, der von dem ersten Verzeichnis abhängt, das immer vorhanden ist, da er verschoben und dann neu erstellt wird. Es macht nichts schneller, nur einfacher, indem es weniger Argumente liefert.Nur aus Gründen der Abwechslung verwende ich in einigen Fällen gern cpio.
quelle
-print0
und-0
Optionen.Mit GNU
mv
:Auf Systemen wie OS X, die nicht haben,
mv -t
aber haben-print0
undxargs -0
:Oder wenn die Dateinamen keine Leerzeichen, Anführungszeichen, Backslashes oder Newlines (mit OS X
xargs
) oder Anführungszeichen, Backslashes oder Newlines (mit GNUxargs
) enthalten:quelle
Versuchen Sie für eine bestimmte Zeit Folgendes:
quelle