Gibt es eine Möglichkeit, mit dem Befehl 'cp' ein Verzeichnis zu kopieren und bestimmte Dateien / Unterverzeichnisse darin auszuschließen?
quelle
Gibt es eine Möglichkeit, mit dem Befehl 'cp' ein Verzeichnis zu kopieren und bestimmte Dateien / Unterverzeichnisse darin auszuschließen?
Verwendung rsync
:
rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination
Beachten Sie, dass die Verwendung von source
und source/
unterschiedlich ist. Ein abschließender Schrägstrich bedeutet, dass der Inhalt des Ordners source
in kopiert wird destination
. Ohne den abschließenden Schrägstrich bedeutet dies, dass Sie die Ordnerquelle in kopieren destination
.
Wenn Sie viele Verzeichnisse (oder Dateien) ausschließen möchten, können Sie alternativ verwenden --exclude-from=FILE
, wobei FILE
der Name einer Datei den Namen von Dateien oder Verzeichnissen enthält, die ausgeschlossen werden sollen.
--exclude
kann auch Platzhalter enthalten, wie z --exclude=*/.svn*
Kopiert von: https://stackoverflow.com/a/2194500/749232
Wenn Sie sich selbst verwenden möchten cp
:
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
Dies setzt voraus, dass die Zielverzeichnisstruktur mit der der Quelle identisch ist.
Kopiert von: https://stackoverflow.com/a/4586025/749232
Spät im Spiel, aber hier ist eine ganz andere Lösung mit Bash und CP: Sie können eine globale Dateispezifikation verwenden, während einige Dateien ignoriert werden.
Angenommen, das Verzeichnis enthält die Dateien:
$ ls *
listed1 listed2 listed3 listed4 unlisted1 unlisted2 unlisted3
Verwendung der GLOBIGNORE- Variablen:
$ export GLOBIGNORE='unlisted*'
$ ls *
listed1 listed2 listed3 listed4
Oder mit genaueren Ausschlüssen:
$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1 listed2 listed3 listed4 unlisted3
Oder negative Übereinstimmungen verwenden :
$ ls !(unlisted*)
listed1 listed2 listed3 listed4
Dies unterstützt auch mehrere nicht übereinstimmende Muster:
$ ls !(unlisted1|unlisted2)
listed1 listed2 listed3 listed4 unlisted3
shopt -s extglob
Außerdem müssen Sie nicht exportierenGLOBIGNORE
: Es soll das Verhalten der aktuellen Shell ändern, die meisten untergeordneten Programme kümmern sich nicht darum.