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.c
inserisce il testo echo nel file senza l'uso di xargs. Qual è la differenza tra queste due condutture?
find . -maxdepth 1 -mindepth 1 -print0 | xargs -0
invece di ls | xargs
:-)
ls | grep -v "notes.txt" | xargs rm
per rimuovere tutto trannenotes.txt
, o in generale, non analizzare mai l'ls
output . 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 extglob
set), orm ^notes.txt
in Zsh (conEXTENDED_GLOB
) ecc.