質問
注:
#cat / tmp / foo
-通常ファイル
/lib/a.lib
/lib/b.lib
/lib/c.lib
/lib/d.lib
cat / tmp / foo | xargs cp / tmp / fred
cp:ターゲット/lib/d.libはディレクトリではありません
解決
xargsは通常、置換された引数を最後に配置します。あなたはただすることができます:
$ cp `cat /tmp/foo` /tmp/fred/.
実際にlibファイルのみの場合、 cp /lib/?.lib / tmp / fred /.
は自然に機能します。
そして実際に xargs
でそれを行うために、argを最初に置く例があります:
0:~$ (echo word1; echo word2) | xargs -I here echo here how now
word1 how now
word2 how now
0:~$
他のヒント
xargsのバージョンは、おそらく -I
を受け入れます:
xargs -I FOO cp FOO /tmp/fred/ < /tmp/foo
/ tmp / fred
がディレクトリであると仮定した場合、 -t
(-target-directory
オプション)を使用して指定します:
$ cat /tmp/foo | xargs cp -t /tmp/fred
次のようなものを試さない理由:
cp /lib/*.lib /tmp/fred
xargsが次のコマンドを作成するため、コマンドが失敗すると思います:
cp /tmp/fred /lib/a.lib /lib/b.lib /lib/c.lib /lib/d.lib
つまり、ディレクトリではない/lib/d.libにすべてをコピーしようとするため、エラーメッセージが表示されます。
宛先ディレクトリはコマンドラインの最後にある必要がありますが、 xargs
はコマンドラインの最後にstdinを追加するので、あなたの試みでは最初の引数として終わります。
xargsを使用する前に/ tmp / fooに宛先を追加するか、逆ティックでcatを使用して宛先の前にソースファイルを補間します:
cp `cat /tmp/foo` /tmp/fred/
/ tmp / fredが存在するディレクトリであると仮定すると、whileループを使用できます
while read file
do
cp $file /tmp/fred
done < /tmp/foo
Sinan&#220; n&#252; rの回答通り
cat /tmp/foo | xargs cp -t /tmp/fred
-tサポートがない場合
( cat /tmp/foo; echo /tmp/fred ) | xargs cp
所属していません StackOverflow