Subject: Re: upgrade to mv
To: None <tech-userlevel@netbsd.org>
From: der Mouse <mouse@Rodents.Montreal.QC.CA>
List: tech-userlevel
Date: 08/15/2001 16:10:10
> it would mean i could do things like:
> find . -name \*.html -print0 | xargs -0 mv -d otherplace
The right place to fix this is xargs, not every program you find
yourself wanting to use with xargs. I long ago wrote my own xargs
(largely to get rid of the quoting misfeatures in the stock one) and
gave it a way to do such things:
* -k<str> indicates that instead of taking the given command and
* arguments and appending the arguments derived from
* the input, xargs should modify and replicate certain
* arguments. Any argument containing <str> will be
* replicated, once per string, as in
*
* .... | xargs -kX mv dir1/X dir2
*
* which will run commands like
*
* mv dir1/foo dir1/bar dir1/blee dir2
*
* If -k is not used, the effect is as if it were used
* with a string that does not otherwise occur, with one
* extra trailing argument, equal to that string, on the
* command.
*
* -r<c><s1><c><s2>
* indicates that certain argument(s) (or portions
* thereof) to the command are to be replicated. If
* <s1> appears as an argument to the command, all
* arguments between that and the next argument equal to
* <s2> (or the last argument, if no argument equals
* <s2>) are replicated, appearing once per string.
* (Normally, -k will be used as well, and at least one
* of the replicated arguments will include the -k
* string, but this does not have to be so.) If an
* argument to the command contains but is not equal to
* <s1>, then part of that argument is replicated.
* Specifically, everything from immediately after the
* <s1>, up to but not including the next <s2> (or the
* end of the argument if there is no following <s2>),
* is replicated. If -k is used and the replicated
* portion contains the -k string, each copy will have
* the -k string replaced as appropriate. For example,
*
* xargs -kXX -r/A/B cmd mAjB blivet A -q XX -f mXX B -t
*
* will run commands like
*
* cmd mjjj blivet -q foo -f mfoo -q bar -f mbar -q blee -f mblee -t
*
* while
*
* xargs -kXX -r/A/B cmd -t mAjXXkB
*
* will run commands like
*
* cmd -t mjfookjbarkjbleek
*
* Neither <s1> nor <s2> may be zero-length; it is also
* an error for the second <c> to be missing.
/~\ The ASCII der Mouse
\ / Ribbon Campaign
X Against HTML mouse@rodents.montreal.qc.ca
/ \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B