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 source
e source/
sono diversi. Una barra finale significa copiare il contenuto della cartella source
in 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 FILE
trova 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 cp
se 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 extglob
inoltre, non è necessario esportareGLOBIGNORE
: si suppone che modifichi il comportamento della shell corrente, la maggior parte dei programmi figlio non se ne preoccuperebbe.