Wie Sie vielleicht bereits wissen, ‘cp’ ist das Kommandozeilenprogramm in Linux zum Kopieren von Dateien und Verzeichnissen. Die einfache und häufigste Verwendung von ‚cp‘ lautet wie folgt:
$ cp file1 file2 file3... fileN target_folder/
Beachten Sie, dass der obige Befehl sowohl für Dateien als auch für ’empty’ funktioniert Ordner. Es funktioniert nicht bei Ordnern mit Inhalt, entweder Dateien oder Unterordnern.
Um solche Ordner zu kopieren, können wir den '-r'
angeben (rekursives) Flag.
$ cp -r folder1/ folder2/ file1 file2 target_folder/
Rekursives Kopieren impliziert, dass die gesamte Ordnerstruktur unterhalb eines Ordners, d. h. Unterordner und darin enthaltene Dateien, Unterordner innerhalb der Unterordner und die darin enthaltenen Dateien usw. kopiert werden.
Dadurch werden alle Dateien kopiert, und es gibt keine Möglichkeit innerhalb des 'cp' Befehl, um einige der Dateien basierend auf bestimmten Parametern auszuschließen. Beispielsweise möchten Benutzer möglicherweise alle Dateien rekursiv kopieren, mit Ausnahme von MP3-(Audio-)Dateien in den Unterordnern ganz unten in der Hierarchie.
Alle Dateien außer bestimmten Dateierweiterungen finden
Um dies zu erreichen, verwenden wir den find-Befehl, ein Befehlstool, das einfach zum Suchen nach Dateien und Ordnern in Linux verwendet wird, basierend auf den Parametern der Datei oder des Ordners:Dateiname, Erweiterung, Größe usw.
Ebenso gibt es Möglichkeiten, Dateien zu suchen, indem Sie angeben, welche Dateien im Suchbefehl ausgeschlossen werden sollen . Die Syntax zum Auffinden von Dateien einer bestimmten Erweiterung mit find ist:
$ find <folder_to_search> -name '*.<extension>'
Um beispielsweise alle MP3-Dateien rekursiv im aktuellen Ordner zu finden:
$ find . -name "*.mp3"
Um nun alle Dateien in den Ordnern und Unterordnern außer MP3-Dateien zu finden, verwenden Sie die „Verneinung“ Operator von find :
$ find . ! -name "*.mp3"
Wir können sehen, dass jetzt alles außer den MP3-Dateien angezeigt wird. Wir wollen die Dateien jedoch nur anzeigen, da diese Ausgabe später in ‘cp’ eingegeben wird . Im Moment zeigt es sowohl Dateien als auch Ordner an (z. B. ‘temp1/’ ), was zu wiederholten Kopien derselben Dateien führt.
Um die Ordner aus der Ausgabe zu entfernen, verwenden Sie einfach das Argument '-type f'
. Hier 'f'
steht für eine Datei.
$ find . ! -name '*.mp3' -type f
Wir haben also jetzt nur noch die rekursiv erhaltenen Dateien im Ordner ‘test’ . Jetzt können wir damit fortfahren, diese Ausgabe an den Befehl „cp“ weiterzuleiten .
Ausschließen bestimmter Dateierweiterungen beim rekursiven Kopieren von Dateien
Dazu verwenden wir die „xargs“ Befehl, um 'cp' zu machen Betrachten Sie die Ausgabe von ‘find‘ als seine Argumente. Außerdem verwenden wir den '-t'
Flag zur Angabe des Zielverzeichnisses, ohne das das Programm die Ausgabe von ‘find‘ berücksichtigt als Zielverzeichnis.
$ find <folder_to_search> ! -name '*.<extension>' -type f | xargs cp -t <target_directory>
Tatsächlicher Befehl.
$ find . ! -name '*.mp3' -type f | xargs cp -t Misc/
Somit werden alle Dateien rekursiv gefunden, außer dem “.mp3”
Dateien wurden in den Ordner „Misc“ kopiert .
Schlussfolgerung
In diesem Artikel haben wir gelernt, wie man Dateien unter Linux rekursiv kopiert und dabei Dateien mit einer bestimmten Erweiterung ausschließt. Sehen Sie sich auch an, wie Sie Dateien einer bestimmten Erweiterung rekursiv kopieren.
Wenn Sie Fragen oder Feedback haben, teilen Sie uns dies in den Kommentaren unten mit.