GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So kopieren Sie eine große Anzahl von Dateien unter Linux

Wir verwenden den cp-Befehl in Linux, um Dateien und Verzeichnisse von einem Verzeichnis in ein anderes zu kopieren. Es kann einfach verwendet werden, um ein paar Dateien oder Verzeichnisse zu kopieren, oder es kann mit dem '-r' verwendet werden -Argument (das für „rekursiv steht ‘), um ein Verzeichnis und die gesamte Verzeichnisbaumstruktur darunter zu kopieren.

Die für den cp-Befehl zu verwendende Syntax ist:

$ cp <file1> <file2> ... <fileN> <target_directory>
$ cp -r <directory1> <directory2> ... <directoryN> <target_directory>
$ cp file1 file2 file3 /tmp

Sollen viele Dateien kopiert werden, können diese mit Wildcards angegeben werden; wenn sie in einem sequentiellen Muster benannt sind (z. B. Dateiname_1 , Dateiname_2 , etc.) oder wenn es viele Dateien mit der gleichen Erweiterung gibt (z. B. .mp4 ).

$ cp *.txt /tmp
$ cp file_* /tmp

Der cp-Befehl kann also beliebig viele Argumente haben, die entweder Dateien, Verzeichnisse oder beides sind. Das letzte Argument ist das Zielverzeichnis, in das sie kopiert werden sollen.

Kopieren einer großen Anzahl von Dateien:Fehler „Argumentliste zu lang“

Während theoretisch „cp ‘ so viele Argumente wie möglich haben kann, gibt es eine vordefinierte Grenze für die maximale Anzahl von Argumenten, mit denen ein einzelner Befehl arbeiten kann. Dies ist eine im Linux-System definierte Grenze und basiert auf der Stapelgröße des Systems.

Werden also sehr viele Dateien mit dem Platzhalter mit ‚cp angegeben ', Z.B. über hunderttausend Dateien wird ein Fehler ausgegeben:„Argument list too long “.

Wie in der Abbildung unten gezeigt, enthält der Ordner beispielsweise 100002 Dateien. Daher gibt es den oben genannten Fehler, wenn wir den Kopierbefehl ausführen und alle Dateien mit einem Platzhalter übergeben.

$ ls -l | wc -l
$ cp file_* target/

Lösung:Verwenden Sie den Befehl „Suchen“, um den Fehler „Argumentliste zu lang“ zu beheben

Um dieses Problem zu lösen, verwenden wir den Suchbefehl , das grundsätzlich anhand verschiedener Parameter nach Dateien in Verzeichnissen sucht. Wir führen „find“ aus ‘ im selben Verzeichnis wie die Dateien, die wir kopieren möchten.

Dann verwenden wir den '-exec' Parameter von ‘find ‘, wodurch Sie jeden Befehl über die Ausgabe von find.

ausführen können
$ find . -maxdepth 1 -name "<filename_pattern>" -exec cp {} <target_directory> \;

Hier das erste Argument, '.' (aktuelles Verzeichnis) ist das Verzeichnis, in dem die Dateien zu finden sind. Das Argument '-maxdepth 1' berücksichtigt nur die Dateien und Verzeichnisse im aktuellen Verzeichnis. Ohne diese Tiefe anzugeben, wird „find ‘ Der Befehl durchsucht unnötigerweise alle Unterverzeichnisse.

Das Argument "-name" und die Zeichenfolge danach gibt den Ausdruck an, mit dem erforderliche Dateien aufgelistet werden können. Dann spezifizieren wir das ‚cp ‘ Befehl nach Argument '-exec' . Die offenen Klammern, '{ }' sind ein Platzhalter für das zu verwendende Argument aus der Ausgabe von find.

$ find . -maxdepth 1 -name "file_*" -exec cp {} target/ \;

Wir können sehen, dass die Dateien erfolgreich nach '/target' kopiert wurden .

$ cd target/
$ ls | head -10
$ ls -l | wc -l

Wenn es Verzeichnisse gibt, die zusammen mit Dateien kopiert werden sollen, führen wir in ähnlicher Weise „cp“ aus ‘ mit dem '-r' Flag im Beispiel unten.

$ find . -maxdepth 1 -name "file_*" -exec cp -r {} target/ \;

Beachten Sie, dass in einem solchen Fall der Verzeichnisname auch mit dem ‘Dateinamenmuster durchsuchbar sein sollte ‘.

Verwandte Lektüre :So verschieben Sie eine große Anzahl von Dateien unter Linux

Schlussfolgerung

In diesem Artikel haben wir gesehen, wie man unter Linux eine große Anzahl von Dateien von einem Verzeichnis in ein anderes kopiert und so das Problem „Argumentliste zu lang umgeht ‘.

Wenn Sie Feedback oder Fragen haben, teilen Sie uns dies in den Kommentaren unten mit!


Linux
  1. So erhöhen Sie das Limit für die Anzahl der geöffneten Dateien in Linux

  2. So benennen Sie Dateien unter Linux um

  3. Wie verwende ich den Rsync-Befehl unter Linux?

  4. Wie kopiere ich Ordner mit Dateien in einen anderen Ordner in Unix/Linux?

  5. So kopieren Sie eine große Anzahl von Dateien schnell zwischen zwei Servern

So verschieben Sie eine große Anzahl von Dateien in Linux

So können Sie große (100 GB+) Dateien unter Linux schneller komprimieren

So kopieren Sie Dateien unter Linux mit dem CP-Befehl

So kopieren Sie Dateien und Verzeichnisse im Linux-Terminal

So kopieren Sie das Verzeichnis unter Linux

So zählen Sie die Anzahl der Dateien in einem Verzeichnis in Linux