Xargs

xargs 在哪裡添加來自 STDIN 的選項?

  • November 17, 2014

由於某些原因,選項順序對命令很重要。例如,不同的選項順序可能會導致不同的動作ffmpeg,那麼從哪裡xargs添加選項stdin呢?

例如:

$ echo 'output.avi' | xargs ffmpeg -i input.avi -r 24

完全等同於:

$ ffmpeg -i inpit.avi -r 24 output.avi

但是如果我想通過管道input.aviecho到發送xargs ffmpeg -i -r 24 output.avi,如何將字元串從 STDIN 設置到指定位置?

我不完全確定我是否跟隨你,但如果你問如何控制xargs傳遞給它的參數的位置,你可以使用開關-I{}來表示你想使用哪個宏來粘貼輸入xargs然後使用這個宏的任何你想要傳遞的東西都可以xargs展開的地方。

**注意:**我{}為我的宏使用符號然後我簡單地把那個宏放在我想要擴展參數的地方。

例子

$ echo hi | xargs -I{} echo {}
hi

$ echo hi | xargs -I{} echo {} {}
hi hi

$ echo hi | xargs -I{} echo {} {} bye
hi hi bye

摘自 xargs 手冊頁

  -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.

引用自:https://unix.stackexchange.com/questions/168364