How to use the xargs argument twice in the command on Linux?

How to use the xargs argument twice in the command on Linux?

For example, to rename file to file.bak where file is from the stdin:

xargs mv $file $file.bak

One solution is to write a small script like move.sh

file=$1
mv $file $file.bak

and invoke move.sh by xargs

xargs move.sh

However, it is very inconvenient that the move.sh should already there.

Are there other better methods?

asked Dec 9, 2015 by anonymous

1 Answer

You can use this trick:

xargs -I@ bash -c "mv @ @.bak"'

Here, the -I@ tells xargs to replace '@' in the command with the argument:

-I replace-str

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.

-- xargs manual

The command for xargs here is actually bash with arguments '-c "mv @ @.bak"' where '@' will be replaced by xargs.

answered Dec 9, 2015 by Eric Z Ma (44,280 points)

Please log in or register to answer this question.

Copyright © SysTutorials. User contributions licensed under cc-wiki with attribution required.
Hosted on Dreamhost

...