質問

注:

#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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top