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?
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?
Réponses:
La magie des rsync
règles de filtrage:
$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest
Consultez la rsync
page 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"
Si vous avez besoin de copier ces fichiers, cp fera:
cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB
L'option --parents
préserve les sous-répertoires - elle crée le chemin de répertoire complet pour la destination.
Cela a fonctionné pour moi:
rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" uid@555.55.555.55:/source/directory/ /destination/directory/
Le -e
commutateur définit le rsync
protocole 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!