Por qué usar rsync
cuando puedes hacer:
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.
cp -r `ls -A | grep -v "c"` $HOME/
Bueno, si la exclusión de ciertos patrones de nombre de archivo tuviera que ser realizada por cada utilidad de archivo de Unix (como cp, mv, rm, tar, rsync, scp, ...), se produciría una inmensa duplicación de esfuerzos. En su lugar, tales cosas se pueden hacer como parte del englobamiento, es decir, por su caparazón.
golpe
man 1 bash
, / extglob .
Ejemplo:
$ shopt -s extglob $ echo images/* images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png $ echo images/!(*.jpg) images/004.bmp images/2252.png
Así que solo pones un patrón dentro de !()
, y niega el partido. El patrón puede ser arbitrariamente complejo, a partir de la enumeración de rutas individuales (como muestra Vanwaril en otra respuesta):!(filename1|path2|etc3)
, a cosas similares a expresiones regulares con estrellas y clases de caracteres. Consulte la página de manual para obtener más detalles.
zsh
man 1 zshexpn
, / generación de nombre de archivo .
Puedes hacer setopt KSH_GLOB
y usa patrones tipo bash. O,
% setopt EXTENDED_GLOB % echo images/* images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png % echo images/*~*.jpg images/004.bmp images/2252.png
Entonces x~y
coincide con el patrón x
, pero excluye el patrón y
. Una vez más, para obtener detalles completos, consulte la página de manual.
peces
El caparazón de pescado tiene una respuesta mucho más bonita a esto:
ð cp (string match -v '*.excluded.names' -- srcdir/*) destdir
Consejo profesional adicional
Escribe cp *
, presiona Ctrl X * y solo mira lo que pasa.
rsync
es rápido y fácil:
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
Puedes usar --exclude
varias veces.
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherfoldertoexclude
Tenga en cuenta que el directorio thefoldertoexclude
después de --exclude
la opción es relativa al sourcefolder
, es decir, sourcefolder/thefoldertoexclude
.
También puede agregar -n
para una ejecución en seco para ver qué se copiará antes de realizar una operación real, y si todo está bien, elimine -n
desde la línea de comandos.