xargsが最初のコマンドの出力を2番目のコマンドのパラメータにリダイレクトし、どのパラメータが出力のどの要素に対応するかを選択する方法がない場合は、1つの方法があります。
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に、最初のコマンドの標準出力を2番目のコマンドで選択した引数にリダイレクトするように指示します。
答え1
-I
に渡されるパラメータの各値に置き換えられるプレースホルダを定義できますxargs
。例えば、
ls -1 | xargs -I '{}' echo '{}'
出力はecho
1行に1回呼び出されます。のようなプレースホルダーなので、よく使われることがls
わかります。'{}'
find
あなたの場合、file
一致するファイル名を抽出するために前処理された出力も必要です。そこには1つあるので、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