Jak używać polecenia `xargs` w Linux: Kompletny przewodnik
Polecenie xargs jest jednym z najpotężniejszych i najbardziej wszechstronnych narzędzi dostępnych w systemach Unix/Linux. Buduje i wykonuje polecenia, odczytując argumenty ze standardowego wejścia, skutecznie wypełniając lukę między poleceniami produkującymi dane wyjściowe a poleceniami przyjmującymi argumenty. Niezależnie od tego, czy zarządzasz tysiącami plików, automatyzujesz powtarzające się zadania powłoki, czy tworzysz złożone potoki poleceń, opanowanie xargs znacząco poprawi Twoją efektywność w terminalu.
W tym kompleksowym przewodniku omówimy, jak xargs działa od środka, przejdziemy przez praktyczne przykłady z życia wzięte, wyjaśnimy wszystkie istotne opcje i pokażemy, jak unikać typowych pułapek.
Czym jest polecenie xargs i jak działa?
W swojej istocie xargs odczytuje elementy ze standardowego wejścia (stdin) — zazwyczaj oddzielone białymi znakami lub znakami nowej linii — i przekazuje je jako argumenty do określonego polecenia. Jest to kluczowe, ponieważ wiele poleceń Unix nie przyjmuje bezpośrednio danych przesyłanych potokiem jako argumentów; oczekują argumentów w wierszu poleceń. xargs rozwiązuje ten problem w elegancki sposób.
Podstawowa składnia to:
command | xargs [options] another_commandNa przykład, aby znaleźć wszystkie pliki .txt w bieżącym katalogu i je usunąć:
find . -name "*.txt" | xargs rmTutaj find generuje listę nazw plików .txt i zapisuje je na stdout. xargs odczytuje tę listę i przekazuje nazwy plików jako argumenty do rm, który następnie je usuwa — wszystko w jednej, wydajnej operacji.
> Dlaczego nie używać po prostu rm $(find . -name "*.txt")? Podstawianie poleceń może zawieść lub zachowywać się nieoczekiwanie, gdy lista argumentów jest bardzo długa lub gdy nazwy plików zawierają znaki specjalne. xargs obsługuje oba scenariusze bezpieczniej i wydajniej.
Podstawowe użycie xargs
Zanim przejdziemy do zaawansowanych przykładów, ustalmy jasne zrozumienie podstawowego wzorca wywołania.
Przekazywanie prostej listy argumentów
echo "file1.txt file2.txt file3.txt" | xargs touchTo polecenie tworzy trzy pliki — file1.txt, file2.txt i file3.txt — przekazując wszystkie trzy nazwy jako argumenty do touch. Bez xargs musiałbyś albo wpisywać każdą nazwę pliku ręcznie, albo pisać pętlę.
Weryfikowanie, co wykona xargs
Przed uruchomieniem potencjalnie destrukcyjnego polecenia użyj flagi -t, aby wydrukować zbudowane polecenie na stderr przed jego wykonaniem:
echo "file1.txt file2.txt" | xargs -t rmWynik:
rm file1.txt file2.txtJest to nieocenione przy debugowaniu potoków przed zatwierdzeniem do wykonania.
Praktyczne przykłady użycia xargs
1. Usuwanie plików znalezionych przez find
Jednym z najczęstszych i najpotężniejszych zastosowań xargs jest łączenie go z find w celu usuwania plików spełniających określone kryteria:
find /var/log -name "*.log" -mtime +30 | xargs rmZnajduje to wszystkie pliki .log w /var/log starsze niż 30 dni i usuwa je. Ten rodzaj automatycznego czyszczenia jest niezbędny do konserwacji serwera — coś, z czym administratorzy prowadzący Hosting VPS lub Serwery Dedykowane mają do czynienia regularnie, aby kontrolować wykorzystanie dysku.
2. Ograniczanie liczby argumentów na wykonanie za pomocą -n
Domyślnie xargs przekazuje jak najwięcej argumentów do polecenia w jednym wywołaniu. Opcja -n pozwala kontrolować dokładnie, ile argumentów jest przekazywanych na wykonanie:
echo "one two three four five six" | xargs -n 2 echoWynik:
one two
three four
five sixJest to szczególnie przydatne, gdy polecenie ma limit liczby argumentów, które może przyjąć, lub gdy chcesz przetwarzać elementy w kontrolowanych partiach.
3. Obsługa nazw plików ze spacjami i znakami specjalnymi za pomocą -0
Jest to jedna z najważniejszych praktyk bezpieczeństwa przy używaniu xargs. Nazwy plików zawierające spacje, znaki nowej linii lub inne znaki specjalne zepsują naiwne potoki. Rozwiązaniem jest użycie find z -print0 (który oddziela nazwy plików bajtami zerowymi zamiast znakami nowej linii) i xargs z -0:
find . -name "*.txt" -print0 | xargs -0 rmBajt zerowy (
