この質問にはすでに回答があります :ファイルを見つけてxargsを使用して移動するにはどうすればよいですか?
(5つの回答)
6年前に閉鎖されました。
Linux
(5つの回答)
6年前に閉鎖されました。
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.
最初のコマンドの標準出力を2番目のコマンドの選択した引数にリダイレクトするようにxargsにどのように指示しますか?
承認された回答:
-I
を使用できます xargs
に入力された引数の各値に置き換えられるプレースホルダーを定義します 。たとえば、
ls -1 | xargs -I '{}' echo '{}'
echo
を呼び出します ls
から1行に1回 の出力。 '{}'
がよく表示されます おそらく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