Estoy tratando de escribir un script bash simple que copiará todo el contenido de una carpeta, incluidos los archivos y carpetas ocultos en otra carpeta, pero quiero excluir ciertas carpetas específicas. ¿Cómo podría lograr esto?
197
cp -R !(dir1|dir2) path/to/destination
!(dir1|dir2)
patrón debeextglob
estar activado (shopt -s extglob
para activarlo).Respuestas:
Use rsync:
Tenga en cuenta que el uso
source
ysource/
son diferentes. Una barra diagonal significa copiar el contenido de la carpetasource
endestination
. Sin la barra inclinada final, significa copiar la carpetasource
endestination
.Alternativamente, si tiene muchos directorios (o archivos) para excluir, puede usar
--exclude-from=FILE
, dondeFILE
está el nombre de un archivo que contiene archivos o directorios para excluir.--exclude
también puede contener comodines, como--exclude=*/.svn*
fuente
rsync -av --exclude='.git/' ../old-repo/ .
Use alquitrán junto con una pipa.
Incluso puedes usar esta técnica en ssh.
fuente
Puedes usar
find
con la-prune
opción.Un ejemplo de
man find
:fuente
cpio
aún no se ha empaquetado para MSYS2.puede usar tar, con la opción --exclude, y luego descomprimirlo en el destino. p.ej
vea la página de manual de tar para más información
fuente
Similar a la idea de Jeff (no probado):
fuente
/usr/share/icons
e inmediatamente llegué afind: paths must precede expression: 22x22
donde este es uno de los subdirectores allí . Mi comando fuefind . -name * -print0 | grep -v "scalable" | xargs -0 -I {} cp -a {} /z/test/
(es cierto que estoy en MSYS2, así que realmente/mingw64/share/icons/Adwaita
, pero no puedo ver cómo esto es culpa de MSYS2)No probado ...
fuente
inspirado en la respuesta de @ SteveLazaridis, que fallaría, aquí hay una función de shell POSIX: simplemente copie y pegue en un archivo nombrado
cpx
en usted$PATH
y hágalo ejecutable (chmod a+x cpr
). [La fuente ahora se mantiene en mi GitLab .Ejemplo de uso
fuente