Dans votre exemple, vous n'avez pas besoin de l'utiliser xargs
car vous find
ferez exactement et en toute sécurité ce que vous voulez faire.
Exactement ce que vous voulez utiliser, find
c'est:
find -maxdepth 1 -name '*Cases*' -exec touch {} +
Dans cet exemple, cela -maxdepth 1
signifie 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, find
a un certain nombre de petits ennuis comme celui-ci, mais sa puissance compense largement.
Les deux find
et xargs
sont difficiles à apprendre au début. Pour vous aider à apprendre, xargs
essayez d’utiliser l’ option -p
ou --interactive
qui 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, find
vous pouvez utiliser -ok
à la place de -exec
pour vous demander si vous souhaitez ou non exécuter la commande.
Il find
arrive cependant que, dans certains cas, vous ne puissiez pas faire tout ce que vous voulez et que ce soit le cas xargs
. La -exec
commande 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 find
vous 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, xargs
sauf si vous utilisez l' option -0
ou --null
avec quelque chose qui génère des éléments de saisie terminés par un caractère nul. des espaces.
xargs
et$(...)
), 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?