What is difference between xargs with braces and without in Linux?
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Riding Sky Waves v001
--
Chapters
00:00 What Is Difference Between Xargs With Braces And Without In Linux?
00:13 Answer 1 Score 4
00:31 Accepted Answer Score 34
01:11 Answer 3 Score 6
01:42 Thank you
--
Full question
https://superuser.com/questions/526352/w...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#linux #centos #xargs
#avk47
ACCEPTED ANSWER
Score 34
xargs rm
will invoke rm
with all arguments as parameter departed with spaces.
xargs -i{} rm {}
will invoke rm {}
for each of the argument and {}
will be replaced by the current argument.
If you have 2 arguments a.txt
and b.txt
, xargs rm
will call this
rm a.txt b.txt
But xargs -i{} rm {}
will call
rm a.txt
rm b.txt
This is because -i
option implies -L 1
option which mean the command rm
will take only 1
line each time. And here each line contains only 1 argument.
Check this Ideone link to get more idea about it.
ANSWER 2
Score 6
-i
option (equivalent to --replace
) creates a sort of placeholder where xargs stores the input it just received. In your second command, the placeholder is {}
, it works like find -exec
option. Once defined, xargs will replace this placeholder with the entire line of input. If you don’t like the {}
name, you can define your own:
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
In your case, both commands are producing the same result. In the second form, you are just making explicit the default behaviour with the -I
option.
ANSWER 3
Score 4
With braces it will spawn one rm
process per file. Without the braces, xargs
will pass as many filenames as possible to each rm
command.
Compare
ls | xargs echo
and
ls | xargs -I {} echo {}