¿Hay alguna manera de usar el comando 'cp' para copiar un directorio y excluir ciertos archivos / subdirectorios dentro de él?
fuente
¿Hay alguna manera de usar el comando 'cp' para copiar un directorio y excluir ciertos archivos / subdirectorios dentro de él?
Uso rsync
:
rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination
Tenga en cuenta que el uso source
y source/
son diferentes. Una barra final medio para copiar el contenido de la carpeta source
en destination
. Sin la barra inclinada final, significa copiar el origen de la carpeta en destination
.
Alternativamente, si tiene muchos directorios (o archivos) para excluir, puede usar --exclude-from=FILE
, donde FILE
está el nombre de un archivo que contiene archivos o directorios para excluir.
--exclude
también puede contener comodines, como --exclude=*/.svn*
Copiado de: https://stackoverflow.com/a/2194500/749232
Si quieres usarlo cp
solo:
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
Esto supone que la estructura del directorio de destino es la misma que la del origen.
Copiado de: https://stackoverflow.com/a/4586025/749232
Al final del juego, pero aquí hay una solución muy diferente que usa bash y cp simples: puede usar una especificación de archivo global mientras se ignoran algunos archivos.
Suponga que el directorio contiene los archivos:
$ ls *
listed1 listed2 listed3 listed4 unlisted1 unlisted2 unlisted3
Usando la variable GLOBIGNORE :
$ export GLOBIGNORE='unlisted*'
$ ls *
listed1 listed2 listed3 listed4
O con exclusiones más específicas:
$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1 listed2 listed3 listed4 unlisted3
O usando coincidencias negativas :
$ ls !(unlisted*)
listed1 listed2 listed3 listed4
Esto también admite varios patrones inigualables:
$ ls !(unlisted1|unlisted2)
listed1 listed2 listed3 listed4 unlisted3
shopt -s extglob
además, no necesita exportarGLOBIGNORE
: se supone que modifica el comportamiento del shell actual, a la mayoría de los programas secundarios no les importaría.