mirror of
https://https.git.savannah.gnu.org/git/findutils.git
synced 2026-01-26 15:39:06 +00:00
Run 'make update-copyright'. * lib/regexprops.c (copying): Update the year number manually. * tests/sample-test: Adjust to use the single most recent year. * All other files: Update copyright years via the above make run.
573 lines
14 KiB
Groff
573 lines
14 KiB
Groff
.TH XARGS 1 \" -*- nroff -*-
|
|
.SH NAME
|
|
xargs \- build and execute command lines from standard input
|
|
.SH SYNOPSIS
|
|
.B xargs
|
|
.nh
|
|
[\fIoptions\fR]
|
|
[\fIcommand\fR [\fIinitial-arguments\fR]]
|
|
.hy
|
|
.
|
|
.SH DESCRIPTION
|
|
This manual page
|
|
documents the GNU version of
|
|
.BR xargs .
|
|
.B xargs
|
|
reads items from the standard input, delimited by blanks (which can be
|
|
protected with double or single quotes or a backslash) or newlines,
|
|
and executes the
|
|
.I command
|
|
(default is
|
|
.IR echo )
|
|
one or more times with any
|
|
.I initial-arguments
|
|
followed by items read from standard input.
|
|
Blank lines on the standard input are ignored.
|
|
.P
|
|
The command line for
|
|
.I command
|
|
is built up until it reaches a system-defined limit (unless the
|
|
.B \-n
|
|
and
|
|
.B \-L
|
|
options are used).
|
|
The specified
|
|
.I 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
|
|
.I 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
|
|
.B \-P
|
|
option.
|
|
.P
|
|
Because Unix filenames can contain blanks and newlines, this default
|
|
behaviour is often problematic; filenames containing blanks
|
|
and/or newlines are incorrectly processed by
|
|
.BR xargs .
|
|
In these situations it is better to use the
|
|
.B \-0
|
|
option, which
|
|
prevents such problems.
|
|
When using this option you will need to
|
|
ensure that the program which produces the input for
|
|
.B xargs
|
|
also uses a null character as a separator.
|
|
If that program is GNU
|
|
.B find
|
|
for example, the
|
|
.B \-print0
|
|
option does this for you.
|
|
.P
|
|
If any invocation of the command exits with a status of 255,
|
|
.B xargs
|
|
will stop immediately without reading any further input.
|
|
An error message is issued on stderr when this happens.
|
|
.
|
|
.SH OPTIONS
|
|
.TP
|
|
.B \-0, \-\-null
|
|
Input items are terminated by a null character instead of by
|
|
whitespace, and the quotes and backslash are not special (every
|
|
character is taken literally).
|
|
Disables the end-of-file string, which is treated like any other argument.
|
|
Useful when input items might contain white space, quote marks, or backslashes.
|
|
The GNU find \-print0 option produces input suitable for this mode.
|
|
|
|
.TP
|
|
.BI "\-a " file ", \-\-arg\-file=" file
|
|
Read items from
|
|
.I file
|
|
instead of standard input.
|
|
If you use this option, stdin remains unchanged when commands are run.
|
|
Otherwise, stdin is redirected from
|
|
.IR /dev/null .
|
|
|
|
.TP
|
|
.BI "\-\-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
|
|
.BR \en ,
|
|
or an octal or hexadecimal escape code.
|
|
Octal and hexadecimal escape codes are understood as for the
|
|
.B 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
|
|
.B \-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
|
|
.B \-\-null
|
|
where this is possible.
|
|
|
|
.TP
|
|
.BI \-E " eof-str"
|
|
Set the end-of-file string to \fIeof-str\fR.
|
|
If the end-of-file
|
|
string occurs as a line of input, the rest of the input is ignored.
|
|
If neither
|
|
.B \-E
|
|
nor
|
|
.B \-e
|
|
is used, no end-of-file string is used.
|
|
.TP
|
|
.BR \-e "[\fIeof-str\fR], " "\-\-eof" [\fI=eof-str\fR]
|
|
This option is a synonym for the
|
|
.B \-E
|
|
option.
|
|
Use
|
|
.B \-E
|
|
instead,
|
|
because it is POSIX compliant while this option is not.
|
|
If \fIeof-str\fR is omitted, there is no end-of-file string.
|
|
If neither
|
|
.B \-E
|
|
nor
|
|
.B \-e
|
|
is used, no end-of-file string is used.
|
|
.TP
|
|
.BI \-I " replace-str"
|
|
Replace occurrences of \fIreplace-str\fR in the initial-arguments with
|
|
names read from standard input.
|
|
Also, unquoted blanks do not
|
|
terminate input items; instead the separator is the newline character.
|
|
Implies
|
|
.B \-x
|
|
and
|
|
.B \-L
|
|
1.
|
|
.TP
|
|
.BR \-i "[\fIreplace-str\fR], " "\-\-replace" [\fI=replace-str\fR]
|
|
This option is a synonym for
|
|
.BI \-I replace-str
|
|
if
|
|
.I replace-str
|
|
is specified.
|
|
If the
|
|
.I replace-str
|
|
argument is missing, the effect is the same as
|
|
.BR \-I {}.
|
|
The
|
|
.B \-i
|
|
option is deprecated; use
|
|
.B \-I
|
|
instead.
|
|
.TP
|
|
.BI \-L " max-lines"
|
|
Use at most \fImax-lines\fR nonblank input lines per command line.
|
|
Trailing blanks cause an input line to be logically continued on the
|
|
next input line.
|
|
Implies
|
|
.BR \-x .
|
|
.TP
|
|
.BR \-l "[\fImax-lines\fR], " \-\-max-lines "[=\fImax-lines\fR]"
|
|
Synonym for the
|
|
.B \-L
|
|
option.
|
|
Unlike
|
|
.BR \-L ,
|
|
the
|
|
.I max-lines
|
|
argument is optional.
|
|
If
|
|
.I max-lines
|
|
is not specified, it defaults to one.
|
|
The
|
|
.B \-l
|
|
option is deprecated since the POSIX standard specifies
|
|
.B \-L
|
|
instead.
|
|
.TP
|
|
.BI \-n " max-args\fR, \fI" "\-\-max\-args" \fR=\fImax-args
|
|
Use at most \fImax-args\fR arguments per command line.
|
|
Fewer than
|
|
.I max-args
|
|
arguments will be used if the size (see the
|
|
.B \-s
|
|
option) is exceeded, unless the
|
|
.B \-x
|
|
option is given, in which case
|
|
.B xargs
|
|
will exit.
|
|
.TP
|
|
.BI \-P " max-procs\fR, \fI" \-\-max\-procs "\fR=\fImax-procs"
|
|
Run up to
|
|
.I max-procs
|
|
processes at a time; the default is 1.
|
|
If
|
|
.I max-procs
|
|
is 0,
|
|
.B xargs
|
|
will run as many processes as possible at a time.
|
|
Use the
|
|
.B \-n
|
|
option or the
|
|
.B \-L
|
|
option with
|
|
.BR \-P ;
|
|
otherwise chances are that only one exec will be done.
|
|
While
|
|
.B 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.
|
|
.B xargs
|
|
never terminates its commands; when asked to decrease, it merely
|
|
waits for more than one existing command to terminate before starting
|
|
another.
|
|
|
|
.B 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).
|
|
.TP
|
|
.B \-o, \-\-open\-tty
|
|
Reopen stdin as
|
|
.I /dev/tty
|
|
in the child process before executing the command.
|
|
This is useful if you want
|
|
.B xargs
|
|
to run an interactive application.
|
|
.TP
|
|
.B \-p, \-\-interactive
|
|
Prompt the user about whether to run each command line and read a line
|
|
from the terminal.
|
|
Only run the command line if the response starts with `y' or `Y'.
|
|
Implies
|
|
.BR \-t .
|
|
.TP
|
|
.BR \-\-process\-slot\-var "=\fIname\fR"
|
|
Set the environment variable
|
|
.I 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.
|
|
.TP
|
|
.B \-r, \-\-no\-run\-if\-empty
|
|
If the standard input does not contain any nonblanks, do not run the
|
|
command.
|
|
Normally, the command is run once even if there is no input.
|
|
This option is a GNU extension.
|
|
.TP
|
|
.BI \-s " max-chars\fR, \fI" \-\-max\-chars "=\fImax-chars\fR"
|
|
Use at most \fImax-chars\fR 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 128\~KiB, 128\~KiB is used as the default value;
|
|
otherwise, the default value is the maximum.
|
|
1\~KiB is 1024 bytes.
|
|
.B xargs
|
|
automatically adapts to tighter constraints.
|
|
.TP
|
|
.B "\-\-show\-limits"
|
|
Display the limits on the command-line length which are imposed by the
|
|
operating system,
|
|
.BR xargs '
|
|
choice of buffer size and the
|
|
.B \-s
|
|
option.
|
|
Pipe the input from
|
|
.I /dev/null
|
|
(and perhaps specify
|
|
.BR \-\-no-run-if-empty )
|
|
if you don't want
|
|
.B xargs
|
|
to do anything.
|
|
.TP
|
|
.B \-t, \-\-verbose
|
|
Print the command line on the standard error output before executing
|
|
it.
|
|
.TP
|
|
.B \-x, \-\-exit
|
|
Exit if the size (see the
|
|
.B \-s
|
|
option) is exceeded.
|
|
.TP
|
|
.B "\-\-"
|
|
Delimit the option list.
|
|
Later arguments, if any, are treated as operands even if they begin with
|
|
.IR \- .
|
|
For example,
|
|
.B xargs \-\- \-\-help
|
|
runs the command
|
|
.I \-\-help
|
|
(found in
|
|
.IR PATH )
|
|
instead of printing the usage text, and
|
|
.B xargs \-\- \-\-mycommand
|
|
runs the command
|
|
.I \-\-mycommand
|
|
instead of rejecting this as unrecognized option.
|
|
.TP
|
|
.B "\-\-help"
|
|
Print a summary of the options to
|
|
.B xargs
|
|
and exit.
|
|
.TP
|
|
.B "\-\-version"
|
|
Print the version number of
|
|
.B xargs
|
|
and exit.
|
|
.PP
|
|
The options
|
|
.B \-\-max-lines
|
|
(\fB\-L\fP, \fB\-l\fP),
|
|
.B \-\-replace
|
|
(\fB\-I\fP, \fB\-i\fP)
|
|
and
|
|
.B \-\-max-args
|
|
(\fB\-n\fP)
|
|
are mutually exclusive.
|
|
If some of them are specified at the same time, then
|
|
.B 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,
|
|
.B xargs
|
|
will issue a warning diagnostic on
|
|
.IR stderr .
|
|
The exception to this rule is that the special
|
|
.I max-args
|
|
value
|
|
.I 1
|
|
('\fB\-n\fP\fI1\fP')
|
|
is ignored after the
|
|
.B \-\-replace
|
|
option and its aliases
|
|
.B \-I
|
|
and
|
|
.BR \-i ,
|
|
because it would not actually conflict.
|
|
|
|
.
|
|
.SH "EXAMPLES"
|
|
.nf
|
|
.B find /tmp \-name core \-type f \-print | xargs /bin/rm \-f
|
|
|
|
.fi
|
|
Find files named
|
|
.B core
|
|
in or below the directory
|
|
.B /tmp
|
|
and delete them.
|
|
Note that this will work incorrectly if there are
|
|
any filenames containing newlines or spaces.
|
|
.P
|
|
.B find /tmp \-name core \-type f \-print0 | xargs \-0 /bin/rm \-f
|
|
|
|
Find files named
|
|
.B core
|
|
in or below the directory
|
|
.B /tmp
|
|
and delete them, processing filenames in such a way that file or
|
|
directory names containing spaces or newlines are correctly handled.
|
|
|
|
.P
|
|
.B find /tmp \-depth \-name core \-type f \-delete
|
|
|
|
Find files named
|
|
.B core
|
|
in or below the directory
|
|
.B /tmp
|
|
and delete them, but more efficiently than in the previous example
|
|
(because we avoid the need to use
|
|
.BR fork (2)
|
|
and
|
|
.BR exec (2)
|
|
to launch
|
|
.B rm
|
|
and we don't need the extra
|
|
.B xargs
|
|
process).
|
|
|
|
.P
|
|
.nf
|
|
.B cut \-d: \-f1 < /etc/passwd | sort | xargs echo
|
|
|
|
.fi
|
|
Generates a compact listing of all the users on the system.
|
|
.
|
|
.SH "EXIT STATUS"
|
|
.B xargs
|
|
exits with the following status:
|
|
.RS
|
|
.IP 0
|
|
if it succeeds
|
|
.IP 123
|
|
if any invocation of the command exited with status 1\(en125
|
|
.IP 124
|
|
if the command exited with status 255
|
|
.IP 125
|
|
if the command is killed by a signal
|
|
.IP 126
|
|
if the command cannot be run
|
|
.IP 127
|
|
if the command is not found
|
|
.IP 1
|
|
if some other error occurred.
|
|
.RE
|
|
|
|
.P
|
|
Exit codes greater than 128 are used by the shell to indicate that
|
|
a program died due to a fatal signal.
|
|
.
|
|
.SH "STANDARDS CONFORMANCE"
|
|
As of GNU xargs version 4.2.9, the default behaviour of
|
|
.B xargs
|
|
is not to have a logical end-of-file marker.
|
|
POSIX (IEEE Std 1003.1, 2004 Edition) allows this.
|
|
.P
|
|
The \-l and \-i options appear in the 1997 version of the POSIX
|
|
standard, but do not appear in the 2004 version of the standard.
|
|
Therefore you should use \-L and \-I instead, respectively.
|
|
.P
|
|
The \-o option is an extension to the POSIX standard for better
|
|
compatibility with BSD.
|
|
.P
|
|
The POSIX standard allows implementations to have a limit on the size
|
|
of arguments to the
|
|
.B exec
|
|
functions.
|
|
This limit could be as low as 4096 bytes including the size of the
|
|
environment.
|
|
For scripts to be portable, they must not rely on a larger value.
|
|
However, I know of no implementation whose actual limit is that small.
|
|
The
|
|
.B \-\-show\-limits
|
|
option can be used to discover the actual limits in force on the
|
|
current system.
|
|
.
|
|
.SH "HISTORY"
|
|
|
|
The
|
|
.B xargs
|
|
program was invented by Herb Gellis at Bell Labs.
|
|
See the Texinfo manual for findutils,
|
|
.IR "Finding Files" ,
|
|
for more information.
|
|
.
|
|
.SH "BUGS"
|
|
It is not possible for
|
|
.B xargs
|
|
to be used securely, since there will always be a time gap between the
|
|
production of the list of input files and their use in the commands
|
|
that
|
|
.B xargs
|
|
issues.
|
|
If other users have access to the system, they can manipulate
|
|
the filesystem during this time window to force the action of the
|
|
commands
|
|
.B xargs
|
|
runs to apply to files that you didn't intend.
|
|
For a more detailed discussion of this and related problems, please refer
|
|
to the ``Security Considerations'' chapter in the findutils Texinfo
|
|
documentation.
|
|
The
|
|
.B \-execdir
|
|
option of
|
|
.B find
|
|
can often be used as a more secure alternative.
|
|
|
|
When you use the
|
|
.B \-I
|
|
option, each line read from the input is buffered internally.
|
|
This means that there is an upper limit on the length of input line that
|
|
.B xargs
|
|
will accept when used with the
|
|
.B \-I
|
|
option.
|
|
To work around this limitation,
|
|
you can use the
|
|
.B \-s
|
|
option to increase the amount of
|
|
buffer space that
|
|
.B xargs
|
|
uses, and you can also use an extra invocation of
|
|
.B xargs
|
|
to ensure that very long lines do not occur.
|
|
For example:
|
|
.P
|
|
.B somecommand | xargs \-s 50000 echo | xargs \-I '{}' \-s 100000 rm '{}'
|
|
.P
|
|
Here, the first invocation of
|
|
.B xargs
|
|
has no input line length limit
|
|
because it doesn't use the
|
|
.B \-i
|
|
option.
|
|
The second invocation of
|
|
.B xargs
|
|
does have such a limit,
|
|
but we have ensured that it never encounters
|
|
a line which is longer than it can handle.
|
|
This is not an ideal solution.
|
|
Instead, the
|
|
.B \-i
|
|
option should not impose a line length
|
|
limit,
|
|
which is why this discussion appears in the BUGS section.
|
|
The problem doesn't occur with the output of
|
|
.BR find (1)
|
|
because it emits just one filename per line.
|
|
.
|
|
.SH "REPORTING BUGS"
|
|
GNU findutils online help: <https://www.gnu.org/software/findutils/#get-help>
|
|
.br
|
|
Report any translation bugs to <https://translationproject.org/team/>
|
|
.PP
|
|
Report any other issue via the form at the GNU Savannah bug tracker:
|
|
.RS
|
|
<https://savannah.gnu.org/bugs/?group=findutils>
|
|
.RE
|
|
General topics about the GNU findutils package are discussed at the
|
|
.I bug\-findutils
|
|
mailing list:
|
|
.RS
|
|
<https://lists.gnu.org/mailman/listinfo/bug-findutils>
|
|
.RE
|
|
.
|
|
.SH COPYRIGHT
|
|
Copyright \(co 1990\(en2024 Free Software Foundation, Inc.
|
|
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
|
|
.br
|
|
This is free software: you are free to change and redistribute it.
|
|
There is NO WARRANTY, to the extent permitted by law.
|
|
.
|
|
.SH "SEE ALSO"
|
|
.BR find (1),
|
|
.BR kill (1),
|
|
.BR locate (1),
|
|
.BR updatedb (1),
|
|
.BR fork (2),
|
|
.BR execvp (3),
|
|
.BR locatedb (5),
|
|
.BR signal (7)
|
|
.PP
|
|
Full documentation <https://www.gnu.org/software/findutils/xargs>
|
|
.br
|
|
or available locally via:
|
|
.B info xargs
|