Befehl cp, um bestimmte Dateien vom Kopieren auszuschließen

35

Gibt es eine Möglichkeit, mit dem Befehl 'cp' ein Verzeichnis zu kopieren und bestimmte Dateien / Unterverzeichnisse darin auszuschließen?

Stephen Jacob
quelle

Antworten:

57

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

saji89
quelle
3

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
Magnet
quelle
1
Für ausschließende Übereinstimmungen müssen erweiterte Globs aktiviert sein: shopt -s extglobAußerdem müssen Sie nicht exportieren GLOBIGNORE: Es soll das Verhalten der aktuellen Shell ändern, die meisten untergeordneten Programme kümmern sich nicht darum.
muru