comando cp per escludere determinati file dalla copia


35

C'è un modo per usare il comando 'cp' per copiare una directory ed escludere alcuni file / sottodirectory al suo interno?

Risposte:


57

Utilizzare rsync:

rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination

Si noti che l'utilizzo sourcee source/sono diversi. Una barra finale significa copiare il contenuto della cartella sourcein destination. Senza la barra finale, significa copiare l'origine della cartella in destination.

In alternativa, se hai molte directory (o file) da escludere, puoi usare --exclude-from=FILE, dove si FILEtrova il nome di un file contenente file o directory da escludere.

--exclude può contenere anche caratteri jolly, ad esempio --exclude=*/.svn*

Copiato da: https://stackoverflow.com/a/2194500/749232

Se vuoi usare cpse stesso:

find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'

Ciò presuppone che la struttura della directory di destinazione sia la stessa di quella di origine.

Copiato da: https://stackoverflow.com/a/4586025/749232


3

Verso la fine del gioco, ecco una soluzione molto diversa che utilizza bash e cp semplici: è possibile utilizzare una specifica di file globale senza ignorare alcuni file.

Supponiamo che la directory contenga i file:

$ ls *
listed1  listed2  listed3  listed4  unlisted1  unlisted2  unlisted3

Utilizzando la variabile GLOBIGNORE :

$ export GLOBIGNORE='unlisted*'
$ ls *
listed1  listed2  listed3  listed4

O con esclusioni più specifiche:

$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1  listed2  listed3  listed4  unlisted3

O usando corrispondenze negative :

$ ls !(unlisted*)
listed1  listed2  listed3  listed4

Questo supporta anche diversi modelli senza eguali:

$ ls !(unlisted1|unlisted2)
listed1  listed2  listed3  listed4  unlisted3

1
Per le partite negative è necessario abilitare globi estesi:, shopt -s extglobinoltre, non è necessario esportare GLOBIGNORE: si suppone che modifichi il comportamento della shell corrente, la maggior parte dei programmi figlio non se ne preoccuperebbe.
muru,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.