Estoy ejecutando Fedora 17 de 64 bits y rsync --exclude=/home/ben/<dir>
no funciona como se esperaba.
Estoy tratando de rsync
llevar mi directorio de inicio a una unidad de disco USB, pero quiero excluir ciertamente los directorios que contienen archivos de caché y archivos de compilación. Este es el comando que estoy usando:
rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home/ben home-ben/
Sin embargo, el contenido de ~/build
y ~/.ccache
está siendo copiado por rsync
. ¿Qué estoy haciendo mal?
Respuestas:
Las
rsync
reglas de filtro global que comienzan con un líder/
están ancladas a la raíz de la transferencia. Citando de la sección "INCLUIR / EXCLUIR REGLAS DE PATRÓN" de la página del manual:En su comando (
rsync ... -arv /home/ben home-ben/
), el archivo/home/ben/foo
se transferirá ahome-ben/ben/foo
. La raíz de la transferencia eshome-ben
y la ruta de filtro correcta es/ben/foo
. Así,/home/ben/.ccache
necesita una ruta de filtro de/ben/.ccache
/home/ben/build/
necesita una ruta de filtro de/ben/build/
Se puede encontrar una explicación más detallada en la sección "ANCLAJE INCLUYE / EXCLUYA PATRONES" de la
rsync(1)
página del manual .Tenga en cuenta que simplemente omitir el líder
/
no es necesariamente lo que desea. Citando nuevamente desde la misma sección de la página man:Por lo tanto, un patrón de filtro de
build/
coincidiría con un directorio de compilación en cualquier lugar/home/ben
, incluso/home/ben/many/sub/directories/build/
.fuente
rsync -a source destination
copiará el directorio de origen en el destino. Esto determina cuál será la raíz de la transferencia para informar la expresión de exclusión. El uso adecuado de / en la expresión de exclusión se explica más arriba. Tenga en cuenta en particular quersync --exclude='/dir1' source destination
no excluirá nada.Creo que sus
exclude
rutas deben ser relativas a la ruta de origen. ¿Puedes probar esto en su lugar?Aquí hay una prueba, para comparar:
fuente
--verbose
muestre el resultado del comando es el formato que debe usar.Tuve este problema en un script (no sé si es tu caso). Lo hice porque usé este comando en un script y estaba usando sh en lugar de bash. verifique el shebang al comienzo de su secuencia de comandos.
fuente
Su patrón de exclusión funcionaría si sincroniza la ruta completa / de inicio, es decir, sin una barra inclinada final:
Pero mejor solo rsync el contenido de la carpeta con una barra inclinada final:
También puede usar una lista de ignorados, consulte: https://askubuntu.com/questions/545655/backup-your-home-directory-with-rsync-and-skip-useless-folders
fuente
Para excluir una carpeta específica con rsync, debe considerar la ruta relativa en el comando. en tu caso:
donde "ben" es la carpeta que está sincronizando
fuente