Gibt es eine Möglichkeit, mit dem Befehl 'cp' ein Verzeichnis zu kopieren und bestimmte Dateien / Unterverzeichnisse darin auszuschließen?
Gibt es eine Möglichkeit, mit dem Befehl 'cp' ein Verzeichnis zu kopieren und bestimmte Dateien / Unterverzeichnisse darin auszuschließen?
Antworten:
Verwendung rsync:
rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination
Beachten Sie, dass die Verwendung von sourceund source/unterschiedlich ist. Ein abschließender Schrägstrich bedeutet, dass der Inhalt des Ordners sourcein 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 FILEder 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 extglobAußerdem müssen Sie nicht exportierenGLOBIGNORE: Es soll das Verhalten der aktuellen Shell ändern, die meisten untergeordneten Programme kümmern sich nicht darum.