Comment puis-je exclure tous les sous-répertoires mais inclure les fichiers d'un répertoire dans rsync?

13

Je veux sauvegarder mon système Ubuntu et j'ai deux partitions à prendre en charge: l'une est /, l'autre l'est /home.

Je vais probablement vouloir sauvegarder /. Ce n'est même pas si grand que je puisse le porter sur ma carte SD, tout en étant suffisamment réactif pour me donner envie d'en avoir une image (c'est pourquoi j'essaie d'utiliser rsync en ce moment).

Et à propos /home, il a beaucoup de sous - répertoires que je ne me soucie pas beaucoup , donc je ne vais pas inclure probablement, mais je veux prendre soin de fichiers là - bas, tels comme .bash_history, .bashrc, .faceet ainsi de suite.

Je souhaite donc exclure tous les sous-répertoires tout en incluant des fichiers dans /home. Comment puis-je y parvenir?

--exclude "*/"ne fonctionnait pas. "/*/", "/**/", --include "*" --exclude */Ne me montre pas ce que je veux. au moins, il a copié le dossier source, sans rien copier à l'intérieur.

Dinir
la source

Réponses:

17

Essayez cette commande:

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

man rsync

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

La règle pour inclure tous les fichiers *et exclure les répertoires*/

Une autre approche pour utiliser la copie régulière cp

cp /home/usr/* /destination

vous pouvez vous débarrasser des erreurs concernant les répertoires en utilisant la redirection

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

Cela ne copiera que les fichiers à l'intérieur de votre maison sans les répertoires

Maythux
la source
/ proc possède un système de fichiers irréel virtuel, vous devez l'exclure de la sauvegarde, vous devez également exclure / tmp et / run
Maythux
Ma commande originale pour sauvegarder les choses était comme ceci: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 et / run, vérifiez! Quoi qu'il en soit, comme vous le voyez dans mon commentaire, je devais sauvegarder l'intégralité du système de fichiers racine à l'exclusion du répertoire personnel à quelques exceptions près. Est-ce que mettre le -f" */" -f"+ *"dans mon code serait sûr? Ce serait peut-être comme ça -f"- home/dinir/*/" -f"+ home/dinir/*"?
Dinir
vous devriez l'utiliser comme ça-f"- home/dinir/*/" -f"+ home/dinir/*"
Maythux
mais je conseille d'utiliser cp pour votre maison, c'est beaucoup plus facile
Maythux
3

Si vous souhaitez résoudre ce problème avec les paramètres --includeet --exclude, vous devez modifier leur ordre: excluez d'abord ce que vous voulez, puis incluez tout. Je le fais habituellement avec cette commande:

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

Par défaut, rsyncne copie pas les répertoires. Vous utilisez peut-être le -adrapeau. Si tel est le cas, notez que, selon la page de manuel , -aest équivalent à -rlptgoD, donc si vous ne voulez pas récurrencer, utilisez simplement -lptgoD.

Brian Moths
la source