Wie kopiere ich versteckte Dateien und versteckte Unterverzeichnisse (die mit einem Punkt beginnen) in Ordner A in Ordner B? Zum Beispiel, wenn ich diese Struktur habe:
A/a
A/b
A/.a
A/.b/
A/.b/somefile
A/.b/.c
Ich möchte nur die versteckten Dateien und versteckten Unterverzeichnisse in A nach B kopieren:
B/.a
B/.b/
B/.b/somefile
B/.b/.c
Ich habe diesen Befehl bereits ausprobiert: cp A/.* B
von dieser anderen Superuser-Frage . Die Unterverzeichnisse werden jedoch nicht kopiert. Auch versucht cp -r A/.* B
, aber es kopiert, .
so dass ich mit einer genauen Kopie von A (einschließlich der normalen Dateien) ende. Jede Hilfe wird geschätzt.
quelle
..c
..*[^.]
aber dann würden Sie Dateien verpassen, die mit einem enden.
. Ich denke, Sie würden in der Tat ein erweitertes Globbing benötigen, um wirklich alle Fälle zu berücksichtigen.Das Problem dabei
A/.*
ist, dass es das Verzeichnis gibt,.
inA
dem auch das Muster übereinstimmt.Sie können erweiterte Glob-Muster aktivieren und Folgendes verwenden:
Es stimmt mit Dateien überein, deren Name mit einem Punkt beginnt und deren zweites Zeichen weder ein Punkt noch nichts ist (? (.) Mit nichts oder einem Punkt übereinstimmt ,! (...) negiert es, dh! (? (.)) Stimmt mit allem anderen überein als nichts oder ein Punkt).
quelle
.!(@(|.))
(AFAICT) dem oben genannten entspricht, (IMNSHO) etwas klarer und nur ein Zeichen länger.In solchen Fällen würde die Verwendung
find
anstelle der folgenden empfohlencp
:Die grundlegende Syntax sieht folgendermaßen aus:
find A/ -type f
:find
Elemente im Verzeichnis,A/
deren Typ eine Datei ist (anstelle eines Verzeichnisses)…-maxdepth 1 -name '.*'
: Dazu für einesmaxdepth
von 1 Verzeichnissen und dessenname
beginnt mit.
.-exec cp -p {} B/ \;
: Und sobald diese Dateien gefunden sind,exec
dercp
Befehl mit einem-p
Flag zum Beibehalten von Datum / Uhrzeit von der Quelle ({}
) bis zum Ziel vonB/
.Ich verwende gerne
maxdepth
eine Steuerungsebene, damit ich nicht versehentlich ein ganzes Dateisystem kopiere. Aber zögern Sie nicht, das zu entfernen.quelle
find A -type d
Bietet eine rekursive Liste in A mit nur Verzeichnissengrep -E "\."
filtert Verzeichnisse mit einem Punkt (dh versteckte Verzeichnisse)cp -r
rekursiv kopierenIch habe die Datei- und Ordnerstruktur für A erstellt und den Befehl in Git Bash ausgeführt (ich bin gerade nicht unter Linux) und es hat funktioniert.
quelle
A B
, und dann würde es unerwartet wirken, weil es auf erweitert würdecp -r A B/.dotfile B
. Der allgemeine Rat ist, überhaupt nicht zu analysierenfind
oderls
auszugeben . Wenn Sie verwendenfind
, sollten Sie auch eigene Filteroptionen verwenden und nichtgrep
, und wenn Sie diefind
Ausgabe an eine andere Stelle weiterleiten, verwenden-print0
Sie den gewünschten Befehl oder rufen Sie ihn direkt auf. Siehe dasfind
Handbuch .extglob
festgelegt werden müssen).find
dann die Analyse.Alternativ können Sie diesen anderen Befehl verwenden, wenn das zweite Zeichen alphanumerisch ist ( Quelle ):
quelle
.@foo
oder..c
.