Sur la ligne de commande Linux, j'aimerais copier un (très grand) ensemble de fichiers .txt
d'un répertoire (et de ses sous-répertoires) dans un autre.
J'ai besoin de la structure de répertoire pour rester intact et je dois ignorer les fichiers sauf ceux se terminant par .txt
.
cd /source/path
find -type f -name \*.txt -exec install -D {} /dest/path/{} \;
Une autre approche
find . -name '*.txt' -exec rsync -R {} path/to/dext \;
Le moyen le plus simple qui a fonctionné pour moi:
cp --parents -R jobs/**/*.xml ./backup/
un problème est que vous devez accéder au répertoire "souhaité" avant que le "chemin parent" soit correct.
Assurez-vous également que vous avez activé les globes récursifs dans bash:
shopt -s globstar
que diriez-vous d'abord copiez-le avec
cp -r /old/folder /new/folder
puis allez dans le nouveau dossier et lancez
find . -type f ! -iname "*.txt" -delete
ou juste
cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete
Edit: ok vous voulez une commande qui filtre (je ne l’ai pas testée car 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 _ testez ceci en premier, parce que je ne l'ai pas encore essayé. Si quelqu'un vérifiait, ce serait génial.
Naviguez vers le répertoire:
find . -regex '<regexp_to_get_directories_and_files_you_want>' | xargs -i cp -r --parents {} path/to/destination
C’est un peu plus simple et puissant si vous gérez les expressions régulières.