Supposons que je veuille supprimer tous les fichiers d'un répertoire à l'exception d'un nommé "notes.txt". Je ferais cela avec le pipeline, ls | grep -v "notes.txt" | xargs rm
. Pourquoi ai-je besoin de xargs si la sortie du second canal est l'entrée que rm doit utiliser?
Par souci de comparaison, le pipeline echo "#include <knowledge.h>" | cat > foo.c
insère le texte en écho dans le fichier sans utiliser de xargs. Quelle est la différence entre ces deux pipelines?
find . -maxdepth 1 -mindepth 1 -print0 | xargs -0
au lieu de ls | xargs
:-)
ls | grep -v "notes.txt" | xargs rm
pour supprimer tout sauf pournotes.txt
, ou en général, ne jamais analyser lals
sortie . Votre commande serait interrompue si un seul fichier contenait un espace, par exemple. La manière la plus sûre seraitrm !(notes.txt)
dans Bash (avecshopt -s extglob
set), ourm ^notes.txt
dans Zsh (avecEXTENDED_GLOB
) etc.