Comment toucher récursivement des fichiers correspondant à un modèle

8

Dans mon répertoire ~ / docs, je veux "toucher" tous les fichiers se terminant par .txt

Comment puis-je faire ceci?

Steve McLeod
la source

Réponses:

20

Avec find:

find ~/docs -name "*.txt" -exec touch {} \;
  • Vous recherchez dans ~/docs
  • L' nameoption correspondra à tous les txtfichiers -  execexécutera la commande touchsur le nom de fichier, qui est substitué dans{}
  • \;termine la commande et touchsera appelé une fois pour chaque fichier trouvé

Remarque:

  • Une légère variation, \+à la fin construit une seule commande à exécuter touchsur tous ces fichiers à la fois. Ce n'est pas possible avec toutes les commandes, mais cela fonctionne touchet vous permet d'économiser quelques appels si vous avez beaucoup de fichiers affectés.
slhck
la source
4
{} \+serait mieux ici ... touchpeut gérer de nombreux noms de fichiers sur sa ligne de commande, donc par exemple, avec 10 000 fichiers et {} \; 10 000 appels seront effectués vers touch... L'utilisation {} \+n'appellera touchqu'une seule fois (selon la mémoire disponible) ... Ici est un extrait de de trouver l' homme-page: -exec command {} + ... The command line is built in much the same way that xargs builds its command lines. Il y a plus de détails dans la man finddocumentation.
Peter.O
@ Peter.O C'est vrai, juste une de mes habitudes d'utiliser l'autre syntaxe.
slhck
@slhck: Et beaucoup plus lent avec des frais généraux plus élevés.
Hello71