Attention aux caractères foireux dans les noms de fichiers (espaces, guillemets, etc. -- enfin pour pas être malin pour mettre des guillemets hein, mais sur des partages samba tout peut arriver :) !
Pour utiliser xargs de manière plus robuste, il faut demander à ls de quoter/échapper les noms avec -Q (sinon xargs peut couper le nom en deux et rechercher deux fichiers distincts) :
ls -Q | grep A | grep -v B | grep .C | xargs rm --
Si on fait un find (cas plus général ?), alors :
find . -name "toto" -print0 | xargs -0 do_something --
La doc de xargs indique bien ce problème potentiel [ avec une typo dans ma version, ils parlent de l'option -O mais c'est bien -0 (zéro) ]
Quand au script avec la boucle 'for' quelques message plus haut, il souffre du même problème et ne fonctionne pas si un nom de fichier contient un espace : le for va faire deux boucles avec les portions de nom...
Ah les joies du shell ! :(
[^] # Re: xargs
Posté par Laurent Morel . En réponse au message action sur le résultat d'une commande. Évalué à 3.
Pour utiliser xargs de manière plus robuste, il faut demander à ls de quoter/échapper les noms avec -Q (sinon xargs peut couper le nom en deux et rechercher deux fichiers distincts) :
ls -Q | grep A | grep -v B | grep .C | xargs rm --
Si on fait un find (cas plus général ?), alors :
find . -name "toto" -print0 | xargs -0 do_something --
La doc de xargs indique bien ce problème potentiel [ avec une typo dans ma version, ils parlent de l'option -O mais c'est bien -0 (zéro) ]
Quand au script avec la boucle 'for' quelques message plus haut, il souffre du même problème et ne fonctionne pas si un nom de fichier contient un espace : le for va faire deux boucles avec les portions de nom...
Ah les joies du shell ! :(