C'è un modo per usare il comando 'cp' per copiare una directory ed escludere alcuni file / sottodirectory al suo interno?
C'è un modo per usare il comando 'cp' per copiare una directory ed escludere alcuni file / sottodirectory al suo interno?
Risposte:
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
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
shopt -s extglobinoltre, non è necessario esportareGLOBIGNORE: si suppone che modifichi il comportamento della shell corrente, la maggior parte dei programmi figlio non se ne preoccuperebbe.