xargs - wykonaj polecenie z argumentami pobranymi ze standardowego
wejścia
xargs [
options] [
command [
initial-arguments]]
Ta strona opisuje wersję GNU programu
xargs.
xargs czyta ze
standardowego wejścia listę elementów rozdzielonych
spacjami (argumenty je zawierające mogą być ujęte
w pojedyncze lub podwójne cudzysłowy albo spacje w argumentach
mogą być poprzedzone przez odwrotne ukośniki) lub znakami
nowej linii. Następnie wykonywane jest
polecenie
(domyślnie
echo) jeden lub więcej razy z
argumentami-początkowymi, po których
następują argumenty przeczytane ze standardowego wejścia.
Puste linie ze standardowego wejścia są ignorowane.
The command line for
command is built up until it reaches a
system-defined limit (unless the
-n and
-L options are used).
The specified
command will be invoked as many times as necessary to use
up the list of input items. In general, there will be many fewer invocations
of
command than there were items in the input. This will normally have
significant performance benefits. Some commands can usefully be executed in
parallel too; see the
-P option.
Ponieważ nazwy plików pod Uniksem mogą zawierać
spacje i znaki nowej linii, to domyślne zachowanie jest często
problematyczne:
xargs niepoprawnie przetwarza pliki zawierające
powyższe znaki. W takich sytuacjach lepiej jest używać
opcji
-0, co zapobiega takim problemom. Podczas używania tej
opcji należy się upewnić, że program, który
przetwarza wejście dla
xargs także używa znaku
null jako separatora. Jeśli na przykład tym programem jest GNU
find, to odpowiednia opcja to
-print0.
Jeśli uruchomione polecenia zakończy się z kodem 255, to
xargs natychmiast przerwie swoje działanie bez czytania dalszego
wejścia. Jeśli się to zdarzy, to na standardowym
wyjściu błędów wypisywany jest komunikat
błędu.
- -0, --null
- Nazwy plików wejściowych są
zakończone znakiem null zamiast spacją, a cudzysłowy
i odwrotne ukośniki nie mają specjalnego znaczenia
(wszystkie znaki są brane dosłownie). Łańcuch
końca pliku jest traktowany jak każdy inny. Opcja jest
użyteczna, gdy argumenty mogą zawierać białe
znaki, cudzysłowy, apostrofy lub odwrotne ukośniki. Ta opcja
może być użyta do pobrania argumentów od
programu GNU find uruchomionego z opcją -print0.
-
-a file, --arg-file=file
- Czyta elementy z podanego pliku file zamiast ze
standardowego wejścia. Jeśli ta opcja jest używane,
to standardowe wejście nie jest zmieniane podczas uruchamiania
poleceń. W przeciwnym wypadku standardowe wejście jest
przekierowywane z /dev/null.
-
--delimiter=delim, -d
delim
- Input items are terminated by the specified character. The
specified delimiter may be a single character, a C-style character escape
such as \n, or an octal or hexadecimal escape code. Octal and
hexadecimal escape codes are understood as for the printf command.
Multibyte characters are not supported. When processing the input, quotes
and backslash are not special; every character in the input is taken
literally. The -d option disables any end-of-file string, which is
treated like any other argument. You can use this option when the input
consists of simply newline-separated items, although it is almost always
better to design your program to use --null where this is possible.
-
-E eof-str
- Nadaje łańcuchowi końca pliku
wartość eof-str. Jeżeli ciąg
oznaczający koniec pliku pojawi się w jednej z linii
wejściowych, reszta danych jest ignorowana. Jeśli nie
użyto opcji -E, ani -e, to łańcuch
końca pliku nie jest używany.
-
-e[eof-str],
--eof[=eof-str]
- Opcja jest synonimem opcji -E. Należy zamiast
niej używać opcji -E, ponieważ jest zgodna z
POSIX-em, podczas gdy ta opcja — nie jest. Jeśli
pominięto eof-str, to łańcuch końca
pliku nie jest używany. Jeśli nie podano ani opcji
-E, ani opcji -e, to łańcuch końca
pliku nie jest używany.
-
-I replace-str
- Zastępuje wszystkie wystąpienia
replace-str w początkowych-argumentach argumentami
przeczytanym ze standardowego wejścia. Ponadto, niecytowane
odstępy nie separują argumentów, zamiast nich
separatorem jest znak nowej linii. Automatycznie włączane
są opcje -x oraz -L 1.
-
-i[replace-str],
--replace[=replace-str]
- This option is a synonym for -Ireplace-str if
replace-str is specified. If the replace-str argument is
missing, the effect is the same as -I{}. This option is deprecated;
use -I instead.
-
-L max-lines
- Używa co najwyżej max-lines niepustych
linii danych wejściowych na każdy wiersz poleceń.
Spacje na końcu linii powodują, że jest do niej
dołączana następna linia. Automatycznie
włączana jest opcja -x.
-
-l[max-lines],
--max-lines[=max-lines]
- Synonim opcji -L. W przeciwieństwie do
-L argument max-lines jest opcjonalny; jeśli nie jest
podany to jego wartością domyślną jest jeden.
Opcja -l jest przestarzała ponieważ standard POSIX
wymienia -L zamiast niej.
-
-n max-args,
--max-args=max-args
- Używa co najwyżej max-args
argumentów na każdy wiersz poleceń. Może
zostać użytych mniej argumentów niż
max-args, jeśli zostanie przekroczony ich rozmiar (patrz
opcja -s), chyba że podana jest opcja -x, w
którym to przypadku działanie programu xargs zostanie
zakończone.
-
-P max-procs,
--max-procs=max-procs
- Run up to max-procs processes at a time; the default
is 1. If max-procs is 0, xargs will run as many processes as
possible at a time. Use the -n option or the -L option with
-P; otherwise chances are that only one exec will be done. While
xargs is running, you can send its process a SIGUSR1 signal to
increase the number of commands to run simultaneously, or a SIGUSR2 to
decrease the number. You cannot increase it above an
implementation-defined limit (which is shown with --show-limits). You
cannot decrease it below 1. xargs never terminates its commands;
when asked to decrease, it merely waits for more than one existing command
to terminate before starting another.
Please note that it is up to the called processes to properly manage
parallel access to shared resources. For example, if more than one of them
tries to print to stdout, the output will be produced in an indeterminate
order (and very likely mixed up) unless the processes collaborate in some
way to prevent this. Using some kind of locking scheme is one way to
prevent such problems. In general, using a locking scheme will help ensure
correct output but reduce performance. If you don't want to tolerate the
performance difference, simply arrange for each process to produce a
separate output file (or otherwise use separate resources).
- -o, --open-tty
- Reopen stdin as /dev/tty in the child process before
executing the command. This is useful if you want xargs to run an
interactive application.
- -p, --interactive
- Prosi użytkownika o potwierdzenie przed
uruchomieniem każdego wiersza poleceń i przeczytaniem danych
z terminala. Uruchamia wiersz poleceń tylko wtedy, gdy
odpowiedź zaczyna się od "y" lub "Y".
Automatycznie włącza opcję -t.
-
--process-slot-var=nazwa
- Set the environment variable name to a unique value
in each running child process. Values are reused once child processes
exit. This can be used in a rudimentary load distribution scheme, for
example.
- -r, --no-run-if-empty
- Jeżeli w danych ze standardowego wejścia nie
znajdują się znaki inne niż spacje, polecenie nie
jest uruchamiane. Normalnie polecenie jest uruchamiane jednorazowo, nawet
gdy nie odczytano żadnych danych. Ta opcja jest rozszerzeniem
GNU.
-
-s max-chars,
--max-chars=max-chars
- Use at most max-chars characters per command line,
including the command and initial-arguments and the terminating nulls at
the ends of the argument strings. The largest allowed value is
system-dependent, and is calculated as the argument length limit for exec,
less the size of your environment, less 2048 bytes of headroom. If this
value is more than 128KiB, 128Kib is used as the default value; otherwise,
the default value is the maximum. 1KiB is 1024 bytes. xargs
automatically adapts to tighter constraints.
- --show-limits
- Wyświetla ograniczenia na
długość linii wiersza poleceń, które
są ustanawiane przez system operacyjny, przez xargs w
przypadku rozmiaru wewnętrznego bufora lub przez opcję
-s. Aby xargs nie zrobił nic poza
wyświetleniem ograniczeń, jego wejście powinno
być przekierowane z /dev/null (i być może
powinna być podana opcja --no-run-if-empty).
- -t, --verbose
- Wiersz poleceń jest wypisywany na standardowe
wyjście błędów przed wykonaniem
polecenia.
- -x, --exit
- Kończy działanie programu, jeżeli
rozmiar zostanie przekroczony (patrz opcja -s).
- --help
- Podaje wszystkie opcje programu xargs i
kończy działanie.
- --version
- Wypisuje numer wersji xargs i kończy
działanie programu.
The options
--max-lines (
-L,
-l),
--replace
(
-I,
-i) and
--max-args (
-n) are mutually
exclusive. If some of them are specified at the same time, then
xargs
will generally use the option specified last on the command line, i.e., it
will reset the value of the offending option (given before) to its default
value. Additionally,
xargs will issue a warning diagnostic on
stderr. The exception to this rule is that the special
max-args
value
1 ('
-n1') is ignored after the
--replace
option and its aliases
-I and
-i, because it would not actually
conflict.
find /tmp -name core -type f -print | xargs /bin/rm -f
Wyszukuje a następnie usuwa pliki o nazwie
core w katalogu
/tmp i jego podkatalogach. Proszę zauważyć,
że będzie to działać niepoprawnie jeśli
którakolwiek z nazw plików zawiera znaki nowej linii lub spacji.
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
Wyszukuje a następnie usuwa pliki o nazwie
core w katalogu
/tmp i jego podkatalogach. Nazwy plików są przetwarzane w
taki sposób, że nazwy plików lub katalogów
zawierające znaki spacji lub nowej linii są poprawnie
obsługiwane.
find /tmp -depth -name core -type f -delete
Wyszukuje a następnie usuwa pliki o nazwie
core w katalogu
/tmp i jego podkatalogach. Robi to jednak w sposób bardziej
efektywny niż w poprzednim przykładzie (ponieważ nie
używa
fork(2) i
exec(2), żeby uruchomić
rm i nie potrzebuje dodatkowego procesu
xargs).
cut -d: -f1 < /etc/passwd | sort | xargs echo
Tworzy zwięzła listę wszystkich
użytkowników systemu.
xargs zwraca następujące kody wyjścia:
- 0
- if it succeeds
- 123
- if any invocation of the command exited with status
1-125
- 124
- if the command exited with status 255
- 125
- if the command is killed by a signal
- 126
- if the command cannot be run
- 127
- if the command is not found
- 1
- if some other error occurred.
Kody zakończenia większe od 128 są używane przez
powłokę do wskazania, że program został zabity
przez sygnał.
Według stanu na wersję 4.2.9 programu GNU xargs,
domyślnie
xargs nie używa logicznego znacznika
końca pliku. Standard POSIX (IEEE Std 1003.1, edycja 2004) na to
pozwala.
Opcje
-l i
-i pojawiają się w wersji standardu POSIX
z roku 1997, ale brak ich w wersji z roku 2004. Dlatego powinno się
używać zamiast nich opcji - odpowiednio -
-L i
-I.
The -o option is an extension to the POSIX standard for better compatibility
with BSD.
Standard POSIX pozwala implementacjom na stosowanie limitu rozmiaru
argumentów funkcji
exec. Limit ten może wynosić
tylko 4096 bajtów, włączając w to rozmiar
środowiska. Przenośne skrypty nie mogą polegać na
tym, że większa wartość jest obsługiwana.
Jednakże nie znamy żadnej implementacji, w której to
ograniczenie jest tak małe. Można użyć opcja
--show-limits, aby wyświetlić ograniczenia mające
zastosowanie do bieżącego systemu.
Nie jest możliwe używanie
xargs w sposób
całkowicie bezpieczny, ponieważ zawsze istnieje dziura czasowa
pomiędzy utworzeniem listy plików wejściowych i
użyciem tej listy przez polecenia, które
xargs wykonuje.
Jeśli inni użytkownicy mają dostęp do systemu, to
mogą zmienić stan systemu plików podczas tej dziury
czasowej, tak żeby wymusić na poleceniach uruchomianych przez
xargs wykonywanie akcji na plikach, które nie były
zamierzone. Bardziej szczegółową dyskusję
dotyczącą tego i podobnych problemów można
znaleźć w rozdziale "Security Considerations"
dokumentacji texinfo pakietu findutils. Opcja
-execdir polecenia
find często może stanowić bardziej
bezpieczną alternatywę.
Podczas używania opcji
-I każda przeczytana linia
wejściowa jest wewnętrznie buforowana. Oznacza to, że
istnieje górne ograniczenie długości linii
wejściowych akceptowanych przez
xargs z
opcją
-I. Aby ominąć to ograniczenie
można użyć opcji
-s do zwiększenia rozmiaru
bufora używanego przez
xargs oraz można także
użyć dodatkowego wywołania
xargs, by
zapewnić, że bardzo długie linie się nie
pojawią. Na przykład:
jakieśpolecenie | xargs -s 50000 echo | xargs -I '{}' -s 100000 rm
'{}'
Powyższe pierwsze wywołanie
xargs nie ma ograniczenia na
długość linii wejściowej, ponieważ nie
używa opcji
-i. Drugie wywołanie
xargs ma takie
ograniczenia, ale zapewniliśmy, że nigdy nie wystąpi
linia dłuższa niż obsługiwana. Nie jest to idealne
rozwiązanie. Zamiast tego opcja
-i nie powinna wymuszać
ograniczenia na długość linii — dlatego też
ten opis pojawia się w rozdziale BŁĘDY. Problem nie
występuje jeśli wejście pochodzi z programu
find(1), ponieważ wypisuje on tylko jedną nazwę
pliku w linii.
Strona internetowa z pomocą GNU findutils:
<
https://www.gnu.org/software/findutils/#get-help>
O błędach tłumaczenia poinformuj przez
<
https://translationproject.org/team/pl.html>
Report any other issue via the form at the GNU Savannah bug tracker:
General topics about the GNU findutils package are discussed at the
bug-findutils mailing list:
Copyright © 1990-2022 Free Software Foundation, Inc. Licencja GPLv3+: GNU
GPL w wersji 3 lub późniejszej
<
https://gnu.org/licenses/gpl.html>.
Jest to wolne oprogramowanie: można je zmieniać i
rozpowszechniać. Nie ma ŻADNEJ GWARANCJI, w granicach
określonych przez prawo.
find(1),
kill(1),
locate(1),
updatedb(1),
fork(2),
execvp(3),
locatedb(5),
signal(7)
Pełna dokumentacja: <
https://www.gnu.org/software/findutils/xargs>
albo dostępna lokalnie przez:
info xargs
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Łukasz Kowalczyk <
[email protected]> i
Robert Luberda <
[email protected]>
Niniejsze tłumaczenie jest wolną dokumentacją.
Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z
GNU
General Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy
zgłaszać na adres listy dyskusyjnej
[email protected]