Dans votre exemple, vous n'avez pas besoin de l'utiliser xargscar vous findferez exactement et en toute sécurité ce que vous voulez faire.
Exactement ce que vous voulez utiliser, findc'est:
find -maxdepth 1 -name '*Cases*' -exec touch {} +
Dans cet exemple, cela -maxdepth 1signifie que vous recherchez uniquement dans le répertoire en cours, ne descendez dans aucun sous-répertoire; Par défaut, find cherchera dans tous les sous-répertoires (ce qui est souvent ce que vous voulez), sauf si vous le contraignez avec maxdepth. Le {}est le nom du fichier qui sera remplacé à la place et le +est l'un des deux marqueurs de fin de commande, l'autre étant ;. La différence entre eux est que ;signifie exécuter la commande sur chaque fichier un à la fois, alors que +signifie exécuter la commande sur tous les fichiers à la fois. Notez cependant que votre shell va probablement essayer de s’interpréter ;lui-même, vous devrez donc y échapper avec \;ou ';'. Oui, finda un certain nombre de petits ennuis comme celui-ci, mais sa puissance compense largement.
Les deux findet xargssont difficiles à apprendre au début. Pour vous aider à apprendre, xargsessayez d’utiliser l’ option -pou --interactivequi vous montrera la commande qu’elle est sur le point d’exécuter et vous demande si vous souhaitez ou non l’exécuter.
De même, findvous pouvez utiliser -okà la place de -execpour vous demander si vous souhaitez ou non exécuter la commande.
Il findarrive cependant que, dans certains cas, vous ne puissiez pas faire tout ce que vous voulez et que ce soit le cas xargs. La -execcommande n'acceptera qu'une seule occurrence d' {}apparition, donc si vous obtenez une erreur find -type f -exec cp {} {}.bak \;, vous pouvez le faire comme suit. :find -type f -print0 | xargs -0 -l1 -IX cp X X.bak
Vous pouvez en apprendre plus sur les commandes d’ exécution dans le manuel GNU Findutils .
De plus, j'ai mentionné que findvous faites ce que vous voulez en toute sécurité, car lorsque vous traitez avec des fichiers, vous allez rencontrer des espaces et d'autres caractères qui poseront problème, xargssauf si vous utilisez l' option -0ou --nullavec quelque chose qui génère des éléments de saisie terminés par un caractère nul. des espaces.
xargset$(...)), xargs est beaucoup plus sûr que la substitution de commande. Et je ne me souviens pas avoir jamais rencontré un nom de fichier légitime contenant une nouvelle ligne. Les problèmes liés aux échappements et à l’expansion des mots liés à la substitution de commande ne sont-ils pas xargs?