J'essaie d'écrire un simple bash script qui copiera le contenu entier d'un dossier, y compris les fichiers et dossiers cachés, dans un autre dossier, mais je veux exclure certains dossiers spécifiques. Comment pourrais-je y parvenir ?
Si vous - comme moi - voulez copier récursivement une structure entière et ne garder qu'un certain type de fichiers, vous pouvez aussi utiliser rsync : rsync -rav --include=*/ --include=" .txt" --exclude= test/ mytest Ceci prendra tous les fichiers .txt du répertoire source et les copiera dans le répertoire de destination avec la structure intacte.
1 votes
J'imagine quelque chose comme find . -name * suivi de grep /v "exclude-pattern" pour filtrer ceux que vous ne voulez pas et ensuite suivi de cp pour faire la copie.
1 votes
J'ai essayé de faire quelque chose comme ça, mais je n'ai pas trouvé comment utiliser cp avec un tube.
1 votes
Cela devrait probablement aller au super utilisateur. La commande que vous cherchez est xargs. Vous pourriez aussi faire quelque chose comme deux tar reliés par un tuyau.
2 votes
Peut-être qu'il est tard et que cela ne répond pas exactement à la question, mais voici une astuce : si vous voulez exclure uniquement les enfants immédiats du répertoire, vous pouvez tirer parti de la correspondance de motifs de bash, par exemple.
cp -R !(dir1|dir2) path/to/destination
1 votes
Notez que le
!(dir1|dir2)
Le motif nécessiteextglob
à activer (shopt -s extglob
pour l'activer).0 votes
n'y a-t-il vraiment aucun moyen de faire cela avec la
cp
commande ? fml