¿Cómo puedo excluir todos los subdirectorios pero incluir archivos de un directorio en rsync?

13

Quiero hacer una copia de seguridad de mi sistema Ubuntu y tengo dos particiones que cuidar: una es /, otra es /home.

Probablemente quiera hacer una copia de seguridad /. Esto ni siquiera es tan grande, así que puedo llevarlo en mi tarjeta SD, a la vez que respondo lo suficiente como para que quiera tener una imagen de él (es por eso que estoy tratando de usar rsync en este momento).

Y alrededor /home, tiene muchos subdirectorios que no se preocupan mucho por lo que no lo más probable es que incluyen, pero quiero tener cuidado acerca de los archivos de allí, tales como .bash_history, .bashrc, .face, y así sucesivamente.

Por lo tanto, quiero excluir todos los subdirectorios al incluir archivos /home. ¿Cómo puedo lograr eso?

--exclude "*/"No estaba funcionando. "/*/", "/**/", --include "*" --exclude */No me muestra lo que quiero. al menos copió la carpeta de origen, sin copiar nada dentro de ella.

Dinir
fuente

Respuestas:

17

Prueba este comando:

rsync -a -f"- */" -f"+ *" /home/user/ destination/

man rsync

-f, --filter=RULE           add a file-filtering RULE

La regla para incluir todos los archivos *y excluir los directorios*/

Otro enfoque para usar la copia regular cp

cp /home/usr/* /destination

puedes deshacerte de los errores sobre los directorios usando la redirección

cp /home/usr/* /destination 2>/dev/null

Esto solo copiará los archivos dentro de su hogar sin los directorios

Maythux
fuente
/ proc tiene un sistema de archivos virtual irreal, debe excluirlo de la copia de seguridad, también debe excluir / tmp y / run
Maythux
Mi comando original para hacer copias de seguridad de cosas era así:rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H -b -s --exclude home/dinir/ --exclude media/ --exclude proc/kcore / /home/dinir/Temporal Site for Storing Backups
Dinir
/ proc, / tmp y / run, ¡Verificar! De todos modos, como puede ver en mi comentario, tenía que hacer una copia de seguridad de todo el sistema de archivos raíz, excepto el directorio de inicio, con pocas excepciones. ¿Poner -f" */" -f"+ *"en mi código sería seguro? Tal vez sería como -f"- home/dinir/*/" -f"+ home/dinir/*"?
Dinir
deberías usarlo así-f"- home/dinir/*/" -f"+ home/dinir/*"
Maythux
pero aconsejo usar cp para tu hogar, es mucho más fácil
Maythux
3

Si desea resolver esto con --includey los --excludeparámetros, debe cambiar el orden de ellos: primero excluya lo que desea, luego incluya todo. Lo hago generalmente con este comando:

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'
Mattia72
fuente
2

Por defecto, rsyncno copia directorios. Quizás estés usando la -abandera. Si este es el caso, tenga en cuenta que de acuerdo con la página de manual , -aes equivalente a -rlptgoD, por lo que si no desea repetir, simplemente use -lptgoD.

Brian Moths
fuente