Make xargs execute the command once for each line of input

后端 未结 13 534
栀梦
栀梦 2020-11-29 15:09

How can I make xargs execute the command exactly once for each line of input given? It\'s default behavior is to chunk the lines and execute the command once, passing multip

相关标签:
13条回答
  • 2020-11-29 15:43

    @Draemon answers seems to be right with "-0" even with space in the file.

    I was trying the xargs command and I found that "-0" works perfectly with "-L". even the spaces are treated (if input was null terminated ). the following is an example :

    #touch "file with space"
    #touch "file1"
    #touch "file2"
    

    The following will split the nulls and execute the command on each argument in the list :

     #find . -name 'file*' -print0 | xargs -0 -L1
    ./file with space
    ./file1
    ./file2
    

    so -L1 will execute the argument on each null terminated character if used with "-0". To see the difference try :

     #find . -name 'file*' -print0 | xargs -0 | xargs -L1
     ./file with space ./file1 ./file2
    

    even this will execute once :

     #find . -name 'file*' -print0  | xargs -0  | xargs -0 -L1
    ./file with space ./file1 ./file2
    

    The command will execute once as the "-L" now doesn't split on null byte. you need to provide both "-0" and "-L" to work.

    0 讨论(0)
提交回复
热议问题