Supponiamo di voler rimuovere tutti i file in una directory tranne uno chiamato "notes.txt". Vorrei farlo con il gasdotto, ls | grep -v "notes.txt" | xargs rm. Perché ho bisogno di xargs se l'output del secondo pipe è l'input che rm dovrebbe usare?
Per motivi di confronto, la pipeline echo "#include <knowledge.h>" | cat > foo.cinserisce il testo echo nel file senza l'uso di xargs. Qual è la differenza tra queste due condutture?
find . -maxdepth 1 -mindepth 1 -print0 | xargs -0invece di ls | xargs:-)
ls | grep -v "notes.txt" | xargs rmper rimuovere tutto trannenotes.txt, o in generale, non analizzare mai l'lsoutput . Il tuo comando verrebbe interrotto se un singolo file contenesse uno spazio, ad esempio. Il modo più sicuro sarebberm !(notes.txt)in Bash (conshopt -s extglobset), orm ^notes.txtin Zsh (conEXTENDED_GLOB) ecc.