Command-Line

如何告訴 xargs 選擇哪個參數?

  • April 2, 2015

當 xargs 將第一個命令輸出重定向到第二個命令的參數並且對於輸出的哪個元素沒有選擇哪個參數時,那麼只有一種方法,例如:

ls | xargs file  # there are as many arguments as files in the listing,
                # but the user does not have too choose himself

現在如果需要選擇:

ls | xargs file | grep image | xargs mv.....   # here the user has to 
                                              # deal  with two arguments of mv, first for source second for destination, suppose your destination argument is set already by yourself and you have to put the output into the source argument. 

您如何告訴 xargs 將第一個命令的標準輸出重定向到您選擇的第二個命令的參數中?

在此處輸入圖像描述

您可以使用-I來定義一個佔位符,該佔位符將替換為饋入的參數的每個值xargs。例如,

ls -1 | xargs -I '{}' echo '{}'

將從的輸出中echo每行呼叫一次。ls你會經常看到'{}'使用,大概是因為它與find’ 佔位符相同。

在您的情況下,您還需要預處理file輸出以提取匹配的文件名;因為那裡有一個grep我們可以awk用來做這兩個,並簡化file呼叫:

file * | awk -F: '/image/ { print $1 }' | xargs -I '{}' mv '{}' destination

如果你有 GNU mv,你可以-t用來傳遞多個源文件:

file * | awk -F: '/image/ { print $1 }' | xargs mv -t destination

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