Załóżmy, że chcę usunąć wszystkie pliki z katalogu oprócz jednego o nazwie „notes.txt”. Chciałbym to zrobić z rurociągu ls | grep -v "notes.txt" | xargs rm. Dlaczego potrzebuję xargs, jeśli wyjście drugiego potoku jest wejściem, którego powinien używać rm?
Dla porównania potok echo "#include <knowledge.h>" | cat > foo.cwstawia echo tekstu do pliku bez użycia xargs. Jaka jest różnica między tymi dwoma rurociągami?
find . -maxdepth 1 -mindepth 1 -print0 | xargs -0zamiast ls | xargs:-)
ls | grep -v "notes.txt" | xargs rmdo usuwania wszystkiego oprócznotes.txt, lub ogólnie, nigdy nie analizowaćlsdanych wyjściowych . Twoje polecenie przestanie działać, jeśli na przykład pojedynczy plik zawiera spację. Bezpieczniej byłobyrm !(notes.txt)w Bash (zshopt -s extglobsetem) lubrm ^notes.txtw Zsh (zEXTENDED_GLOB) itp.