Kopiere rekursiv mit Ausnahme des versteckten Verzeichnisses


13

Wie kopiere ich rekursiv gerne cp -rf *, aber ohne versteckte Verzeichnisse (Verzeichnisse beginnend mit.) Und deren Inhalt?

Antworten:


6

Man könnte einfach alles mit kopieren

cp -rf 

und löschen Sie dann versteckte Verzeichnisse am Ziel mit

find -type d -name '.*' -and -not -name '.' -print0 | xargs -0 rm -rf

Wenn Sie einen fortgeschrittenen Teer haben (z. B. GNU-Teer), können Sie auch versuchen, einige Muster mit tar auszuschließen. Ich fürchte aber, dass es nicht möglich ist, versteckte Verzeichnisse nur auszuschließen, sondern versteckte Dateien einzuschließen.

Zum Beispiel so etwas:

tar --exclude=PATTERN -f - -c * | tar -C destination -f - -x

Übrigens hat GNU Tar einen Zoo von Exclude-Style-Optionen. Mein Favorit ist

--exclude-vcs

30

Gute Optionen zum Kopieren eines Verzeichnisbaums mit Ausnahme einiger Dateien sind:

  • rsync : Dies ist im Grunde genommen CP plus eine Tonne von Ausschlussmöglichkeiten.

    rsync -a --exclude='.*' /source/ /destination
    
  • pax : Es hat einige Ausschlussfunktionen und es ist in POSIX enthalten, sollte also überall verfügbar sein (mit der Ausnahme, dass einige Linux-Distributionen es aus irgendeinem Grund nicht in ihre Standardinstallation aufnehmen).

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.