J'essaie de diriger la sortie de grep
vers rm
, mais cela génère des trucs inutiles. Un commutateur est-il requis pour rm
? Ou rm
peut-on fournir directement une expression rationnelle?
ls | grep '^\[Daruchini'| rm
rm: opérande manquant Essayez `rm --help 'pour plus d'informations.
Vous devez utiliser xargs
pour transformer l'entrée standard en arguments pour rm
.
$ ls | grep '^Dar' | xargs rm
(Méfiez-vous des caractères spéciaux dans les noms de fichiers; avec GNU grep, vous préférerez peut-être
$ ls | grep -Z '^Dar' | xargs -0 rm
)
De plus, bien que le Shell n'utilise pas d'expressions rationnelles, c'est un modèle simple:
$ rm Dar*
(en attendant, je pense que j'ai besoin de plus de sommeil.)
Ne pas analyser la sortie de ls
.
Ici, il est très simple d'obtenir le Shell pour filtrer les fichiers que vous souhaitez. Notez que c'est le Shell qui étend le modèle Dar*
, pas la commande rm
. L'extension de modèle effectuée par le Shell est appelée globbing .
rm Dar*
Dans les cas plus complexes, recherchez la commande find
.
Si vous souhaitez délimiter la sortie de grep
par des sauts de ligne plutôt que par des espaces, vous pouvez spécifier cela à xargs
via le -d
option.
$ ls | grep '^Dar' | xargs -d '\n' rm
(comme décrit dans this question)
Pour passer la sortie en argument, j'ai tendance à utiliser une boucle while car je ne suis pas familier avec les xargs.
ls | grep '^Dar' | while read line; do rm "$line";done;
Sur Catalina 10.15.3, avec zsh, la façon dont j'ai trouvé pour gérer les nouvelles lignes et les espaces blancs était:
Sudo find / | grep -i 'yourString' | tr '\n' '\0' | xargs -0 -n1 rm -r
En d'autres termes, en traduisant de nouvelles lignes sans espace (tr\n à\0) avant de les supprimer avec "rm -0".
De plus, j'utilise toujours 'find' + 'grep -i' car 'find -iname' ne produit parfois rien.
Une dernière remarque: il trouve et supprime les fichiers et dossiers qui correspondent à "yourString". Pour les fichiers uniquement, spécifiez "find -type f", puis l'option "-r" pour rm est inutile.
La meilleure commande pour moi est:
find ./Daruchini* -exec rm {}\;