90 votes

Comment puis-je copier récursivement des fichiers par extension de fichier, en préservant la structure du répertoire ?

À la ligne de commande Linux, j'aimerais copier un (très grand) ensemble d'éléments de .txt d'un répertoire (et de ses sous-répertoires) à un autre.

J'ai besoin que la structure des répertoires reste intacte, et j'ai besoin d'ignorer les fichiers sauf ceux se terminant par .txt .

111voto

Vous pouvez utiliser trouver y cpio pour ce faire

cd /top/level/to/copy
find . -name '*.txt' | cpio -pdm /path/to/destdir

(-updm for overwrite destination content.)

10voto

Julien Grenier Points 225
cd /source/path
find -type f -name \*.txt -exec install -D {} /dest/path/{} \;

5voto

icyerasor Points 549

C'est la méthode la plus simple qui ait fonctionné pour moi :

cp --parents -R jobs/**/*.xml ./backup/

Le problème est que vous devez d'abord naviguer vers le répertoire "désiré" pour que le "chemin parent" soit correct.

Assurez-vous également d'avoir activé les globs récursifs dans bash :

shopt -s globstar

5voto

Marc Points 151

Une autre approche

find . -name '*.txt' -exec rsync -R {} path/to/dext \;

2voto

Neil Albrock Points 436

Et si vous copiez d'abord avec

cp -r /old/folder /new/folder

puis allez dans le nouveau dossier et exécutez

find . -type f ! -iname "*.txt" -delete

ou simplement

cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete

Edit : ok vous voulez une commande qui filtre (je n'ai pas testé cela parce que mon système n'a pas la commande cpio ). Voici où je l'ai trouvé : http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-Files

find . -name "*.txt" -print0 |
     cpio -pmd0 /dest-dir

S'il vous plaît teste d'abord ça, parce que je ne l'ai pas encore essayé. Si quelqu'un pouvait vérifier, ce serait formidable.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X