mirror of
git://git.sv.gnu.org/findutils.git
synced 2026-01-30 21:28:58 +01:00
* xargs/xargs.1: Update the description of -e option to emphasize that the argument must follow the option letter immediately (in other words, that it may not appear in the next program argument). Likewise for the the -i and -l (lower-case L) options. * xargs/xargs.c (usage): Minor consistency improvements to help text.
505 lines
14 KiB
Groff
505 lines
14 KiB
Groff
.TH XARGS 1 \" -*- nroff -*-
|
|
.SH NAME
|
|
xargs \- build and execute command lines from standard input
|
|
.SH SYNOPSIS
|
|
.B xargs
|
|
.nh
|
|
[\fB\-0prtx\fR]
|
|
[\fB\-E \fIeof-str\fR]
|
|
[\fB\-e\fR[\fIeof-str\fR]]
|
|
[\fB\-\-eof\fR[=\fIeof-str\fR]]
|
|
[\fB\-\-null\fR]
|
|
[\fB\-d \fIdelimiter\fR]
|
|
[\fB\-\-delimiter \fIdelimiter\fR]
|
|
[\fB\-I \fIreplace-str\fR]
|
|
[\fB\-i\fR[\fIreplace-str\fR]]
|
|
[\fB\-\-replace\fR[=\fIreplace-str\fR]]
|
|
[\fB\-l\fR[\fImax-lines\fR]]
|
|
[\fB\-L \fImax-lines\fR]
|
|
[\fB\-\-max\-lines\fR[=\fImax-lines\fR]]
|
|
[\fB\-n \fImax-args\fR]
|
|
[\fB\-\-max\-args\fR=\fImax-args\fR]
|
|
[\fB\-s \fImax-chars\fR]
|
|
[\fB\-\-max\-chars\fR=\fImax-chars\fR]
|
|
[\fB\-P \fImax-procs\fR]
|
|
[\fB\-\-max\-procs\fR=\fImax-procs\fR]
|
|
[\fB\-\-process\-slot\-var\fR=\fIname\fR]
|
|
[\fB\-\-interactive\fR]
|
|
[\fB\-\-verbose\fR]
|
|
[\fB\-\-exit\fR]
|
|
[\fB\-\-no\-run\-if\-empty\fR]
|
|
[\fB\-\-arg\-file\fR=\fIfile\fR]
|
|
[\fB\-\-show\-limits\fR]
|
|
[\fB\-\-version\fR]
|
|
[\fB\-\-help\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 /bin/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
|
|
.PD
|
|
.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
|
|
.PD
|
|
.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
|
|
.PD
|
|
.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
|
|
.PD
|
|
.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
|
|
.PD
|
|
.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 {}.
|
|
This 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
|
|
.PD
|
|
.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
|
|
.PD
|
|
.BI \-n " max-args\fB, \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
|
|
.PD
|
|
.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 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 ouptut 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
|
|
.PD
|
|
.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
|
|
.PD
|
|
.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
|
|
.PD
|
|
.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
|
|
.PD
|
|
.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 128KiB, 128Kib is used as the default value; otherwise, the
|
|
default value is the maximum. 1KiB 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
|
|
.PD
|
|
.B \-x, \-\-exit
|
|
Exit if the size (see the
|
|
.B \-s
|
|
option) is exceeded.
|
|
.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.
|
|
.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
|
|
|
|
.fi
|
|
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
|
|
|
|
.fi
|
|
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.
|
|
|
|
.P
|
|
.nf
|
|
.B xargs sh -c 'emacs \(dq$@\(dq < /dev/tty' emacs
|
|
|
|
.fi
|
|
Launches the minimum number of copies of Emacs needed, one after the
|
|
other, to edit the files listed on
|
|
.BR xargs '
|
|
standard input. This example achieves the same effect as BSD's
|
|
.B -o
|
|
option, but in a more flexible and portable way.
|
|
|
|
|
|
|
|
.SH "EXIT STATUS"
|
|
.B xargs
|
|
exits with the following status:
|
|
.nf
|
|
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.
|
|
.fi
|
|
.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 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 "SEE ALSO"
|
|
\fBfind\fP(1), \fBlocate\fP(1), \fBlocatedb\fP(5), \fBupdatedb\fP(1),
|
|
\fBfork\fP(2), \fBexecvp\fP(3),
|
|
\fBkill\fP(1), \fBsignal\fP(7),
|
|
|
|
The full documentation for
|
|
.B xargs
|
|
is maintained as a Texinfo manual. If the
|
|
.B info
|
|
and
|
|
.B xargs
|
|
programs are properly installed at your site, the command
|
|
.B info xargs
|
|
should give you access to the complete manual.
|
|
|
|
.SH "BUGS"
|
|
The
|
|
.B \-L
|
|
option is incompatible with the
|
|
.B \-I
|
|
option, but perhaps should not be.
|
|
.P
|
|
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 the 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.
|
|
.P
|
|
The best way to report a bug is to use the form at
|
|
http://savannah.gnu.org/bugs/?group=findutils.
|
|
The reason for this is that you will then be able to track progress in
|
|
fixing the problem. Other comments about \fBxargs\fP(1) and about
|
|
the findutils package in general can be sent to the
|
|
.I bug\-findutils
|
|
mailing list. To join the list, send email to
|
|
.IR bug\-findutils\-request@gnu.org .
|