Comment puis-je copier un sous-ensemble de fichiers à partir d'un répertoire tout en préservant la structure des dossiers?

8

Je veux déplacer un sous-ensemble de fichiers de dirA à dirB (disons des fichiers avec "blah" dans le nom de fichier), mais je veux que tous les répertoires imbriqués soient les mêmes dans le nouvel emplacement. Comment puis je faire ça?

cstack
la source
doublon possible du filtre Rsync: copier un seul motif
Gilles 'SO- arrête d'être méchant'

Réponses:

9

La magie des rsyncrègles de filtrage:

$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest

Consultez la rsyncpage de manuel pour les détails sur les règles de filtrage, mais voici la version condensée pour ce besoin particulier.

--filter="+ */" signifie "inclure tout ce qui est un répertoire"

--filter="-! *blah* signifie "exclure tout ce qui n'inclut pas bla dans le nom de fichier"

pdo
la source
3

Si vous avez besoin de copier ces fichiers, cp fera:

cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB

L'option --parentspréserve les sous-répertoires - elle crée le chemin de répertoire complet pour la destination.

Joanna Kotuła
la source
la syntaxe ici est beaucoup plus claire que rsync
Matěj Šmíd
0

Cela a fonctionné pour moi:

rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" [email protected]:/source/directory/ /destination/directory/

Le -ecommutateur définit le rsyncprotocole de transfert avec le port comme -p 22. En outre, les /barres obliques de fin sont importantes pour informer le programme qu'il traite des répertoires.

Merci @pdo pour les heures supplémentaires de ma journée de travail!

Kambiz
la source