Rsync es una herramienta muy poderosa para realizar copias de seguridad o sincronizar archivos y directorios entre dos ubicaciones (o servidores) diferentes.
Ya lo sabe, ya que le presentamos ejemplos prácticos en rsync anteriormente.
En una situación típica de copia de seguridad, es posible que desee excluir uno o más archivos (o directorios) de la copia de seguridad. También es posible que desee excluir un tipo de archivo específico de rsync.
Este artículo explica cómo ignorar varios archivos y/o directorios durante rsync con ejemplos.
Primero, cree una estructura de directorio de muestra como se muestra a continuación (con algunos archivos vacíos) que se puede usar con fines de prueba.
$ cd ~ $ mkdir -p source/dir1/dir2 $ mkdir -p source/dir3 $ touch source/file1.txt $ touch source/file2.txt $ touch source/dir1/dir2/file3.txt $ touch source/dir3/file4.txt
El comando anterior creará un directorio de origen (bajo su directorio de inicio) con la siguiente estructura.
source - file1.txt - file2.txt - dir1 - dir2 - file3.txt - dir3 - file4.txt
1. Excluir un directorio específico
Si no desea sincronizar dir1 (incluidos todos sus subdirectorios) desde la fuente a la carpeta de destino, use la opción rsync –exclude como se muestra a continuación.
$ rm -rf destination $ rsync -avz --exclude 'dir1' source/ destination/ building file list ... done created directory dest ./ file1.txt file2.txt dir3/ dir3/file4.txt
Verifique que dir1 no se copie del directorio de origen al directorio de destino.
$ find destination destination destination/file2.txt destination/file1.txt destination/dir3 destination/dir3/file4.txt
2. Excluir varios directorios que coincidan con un patrón
El siguiente ejemplo excluirá cualquier directorio (o subdirectorios) bajo source/ que coincida con el patrón "dir*"
$ rm -rf destination $ rsync -avz --exclude 'dir*' source/ destination/ building file list ... done created directory destination ./ file1.txt file2.txt
Verifique el directorio de destino para asegurarse de que no haya copiado ningún directorio que contenga la palabra clave "dir".
$ find destination destination destination/file2.txt destination/file1.txt
3. Excluir un archivo específico
Para excluir un archivo específico, use la ruta relativa del archivo en la opción de exclusión como se muestra a continuación.
$ rm -rf destination $ rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/ building file list ... done created directory destination ./ file1.txt file2.txt dir1/ dir1/dir2/ dir3/ dir3/file4.txt
Verifique el directorio de destino para asegurarse de que no copió el archivo específico (dir1/dir2/file3.txt en este ejemplo).
$ find destination destination destination/file2.txt destination/file1.txt destination/dir1 destination/dir1/dir2 destination/dir3 destination/dir3/file4.txt
4. La ruta de exclusión siempre es relativa
Si no tiene cuidado, podría cometer este error.
En el siguiente ejemplo, la opción de exclusión parece tener una ruta completa (es decir, /dir1/dir2/file3.txt). Pero, desde el punto de vista de rsync, la ruta de exclusión siempre es relativa y se tratará como dir1/dir2/file3.txt. En el siguiente ejemplo, rsync buscará dir1 en el directorio de origen (y no en el directorio raíz /).
$ rsync -avz --exclude '/dir1/dir2/file3.txt' source/ destination/
Entonces, el comando anterior es exactamente igual que el siguiente. Solo para evitar confusiones (y para que sea más fácil de leer), no proporcione / delante de la ruta de exclusión.
$ rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/
5. Excluir un tipo de archivo específico
Para excluir un tipo de archivo específico que tiene una extensión específica, use el patrón apropiado. Por ejemplo, para excluir todos los archivos que contienen .txt como extensión, haga lo siguiente.
$ rsync -avz --exclude '*.txt' source/ destination/ building file list ... done created directory destination ./ dir1/ dir1/dir2/ dir3/
Verifique el directorio de destino para asegurarse de que no haya copiado los archivos *.txt.
$ find destination destination destination/dir1 destination/dir1/dir2 destination/dir3
6. Excluir varios archivos y directorios al mismo tiempo
Cuando desee excluir varios archivos y directorios, siempre puede especificar varias opciones de exclusión de rsync en la línea de comandos, como se muestra a continuación.
$ rsync -avz --exclude file1.txt --exclude dir3/file4.txt source/ destination/
Esperar. ¿Qué pasa si tengo toneladas de archivos que quiero excluir de rsync?
No puedo seguir agregándolos en la línea de comando usando múltiples –exclude, que es difícil de leer y difícil de reutilizar el comando rsync para más adelante.
Entonces, la mejor manera es usar la opción rsync –exclude-from como se muestra a continuación, donde puede enumerar todos los archivos (y directorios) que desea excluir en un archivo.
Primero, cree un archivo de texto con una lista de todos los archivos y directorios que no desea respaldar. Esta es la lista de archivos y directorios que desea excluir del rsync.
$ vim exclude-list.txt file1.txt dir3/file4.txt
A continuación, ejecute rsync usando la opción –exclude-from con la lista de exclusión.txt como se muestra a continuación.
$ rm -rf destination $ rsync -avz --exclude-from 'exclude-list.txt' source/ destination/ building file list ... done created directory destination ./ file2.txt dir1/ dir1/dir2/ dir1/dir2/file3.txt dir3/
Verifique el directorio de destino para asegurarse de que los archivos y directorios enumerados en el archivo include-list.txt no estén respaldados.
$ find destination destination destination/file2.txt destination/dir1 destination/dir1/dir2 destination/dir1/dir2/file3.txt destination/dir3