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.c
wstawia 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 -0
zamiast ls | xargs
:-)
ls | grep -v "notes.txt" | xargs rm
do usuwania wszystkiego oprócznotes.txt
, lub ogólnie, nigdy nie analizowaćls
danych 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 extglob
setem) lubrm ^notes.txt
w Zsh (zEXTENDED_GLOB
) itp.