Une de mes pratiques courantes consiste à effectuer des greps sur tous les fichiers d'un certain type, par exemple, trouver tous les fichiers HTML qui contiennent le mot "rumpus". Pour ce faire, j'utilise
find /path/to -name "*.html" | xargs grep -l "rumpus"
Occasionnellement, find
retournera un fichier avec un espace dans son nom tel que my new file.html
. Cependant, une fois xargs
transmis à grep
, j'obtiens ces erreurs:
grep: /path/to/bad/file/my: No such file or directory
grep: new: No such file or directory
grep: file.html: No such file or directory
Je peux voir ce qui se passe ici: le tuyau ou le xargs
traite les espaces comme des délimiteurs entre les fichiers. Pour la vie de moi, cependant, je ne peux pas comprendre comment empêcher ce comportement. Peut-on le faire avec find
+ xargs
? Ou dois-je utiliser une commande entièrement différente?
Trouvez et si les versions xarg sur votre système ne prend pas en charge
-print0
et les-0
commutateurs (par exemple trouver AIX et xargs) vous pouvez utiliser ceci:Ici sed prendra soin de s'échapper des espaces pour xargs.
la source
find
tout recommencer.