Ich habe die folgende Verzeichnisstruktur:
Main_Dir
|
-----------------------------------
Subdir1 Subdir2 Subdir3
| | |
--------- --------- ---------
| | | | | | | | |
fo1 fo2 f03 fo1 fo2 f03 fo1 fo2 f03
Ich möchte alle Unterverzeichnisse kopieren ( Subdir1
, Subdir2
, Subdir3
) in einen neuen Ordner. Aber ich möchte nur Ordner fo1
und fo2
Ordner an der neuen Stelle kopieren .
Ich bin mir nicht sicher, wie ich das machen könnte.
Antworten:
Wenn der Verzeichnisbaum mehr als nur ein Verzeichnis ist, können
..../f03
Sie mit diesemrsync
Befehl jedesfo1
& kopierenfo2
und jedes andere Verzeichnis mit dem Namen ausschließenfo*
.Wenn ich mich mit solchen Kopierszenarien beschäftige, verwende ich immer
rsync
und es ist--dry-run
&--verbose
Schalter, damit ich sehen kann, was es tun wird, ohne die Dateien tatsächlich kopieren zu müssen.Beispiel
Probelauf.
Wenn Sie einen Teil der
rsync
internen Logik sehen möchten, was eingeschlossen / ausgeschlossen wird, verwenden Sie den--verbose
Schalter.Wenn Sie andere Arten von Verzeichnissen ausschließen müssen, können Sie mehrere Ausschlüsse hinzufügen.
quelle
Verwendung
rsync
:quelle
Sie könnten so etwas versuchen:
Der
find
Befehl gibt alle direkten Unterverzeichnisse von Main_Dir zurück.basename
wird wieder den Namen des Unterverzeichnis (zBbasename Main_Dir/Subdir1
ErträgeSubdir1
). Dann verwenden Sie die Shell Klammer Expansion zu vermeiden Eingabefo1
undfo2
mehrmals und kopieren Sie sie in das neu erstelltenew_dir/$(basename $subdir)
Verzeichnis.In dem speziellen Fall, in dem Sie erwähnen, wo sich nur Verzeichnisse befinden
Main_Dir
und in dem die Namen keine Leerzeichen oder seltsamen Zeichen enthalten, können Sie das oben Gesagte vereinfachenquelle
Wenn Ihre Verzeichnisstruktur genau der in Ihrem Beispiel entspricht (dh alle
fo
Dateien befinden sich auf derselben Ebene):quelle