`xargs` passes the argument once to the utility command specified. For example,
xargs cat will
cat every line passed to
xargs. But how to use the xargs argument twice in the command on Linux? For example, to rename
file.bak where file is from the stdin.
One solution is to write a small script like move.sh
file=$1 mv $file $file.bak
and invoke move.sh by xargs
However, it is very inconvenient that the move.sh should already there.
Are there other better methods?
You can use this trick to use the insert mode of
xargs -I@ bash -c "mv @ @.bak"'
xargs to replace ‘@’ in the command with the argument:
Replace occurrences of replace-str 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
-x and -L 1.
The command for
xargs here is actually
bash with arguments ‘-c “mv @ @.bak”‘ where ‘@’ will be replaced by