0

Egrep はファイルの内容に基づいてファイルのリストを生成していますが、そのリストを引数として cp に渡そうとして何か間違ったことをしています。(私のシェルは bash です)。ファイル名のスペースをエスケープして改行をスペースに変換すると思っていましたが、cp はパイプ入力でエスケープされたスペースを無視するようです。

ファイル名の例:2011-05-15\ 14.43.41.txt

$ cp `egrep -l "OS\ version: 10.6" * | sed -e 's/ /\ /g' | tr '\n' ' '` ~/crashreportstemp/

cp: cannot stat `2011-05-15': No such file or directory

バッククォートの内容を実行すると、cp に貼り付けることができる出力が得られます。

私もxargsを使ってみました:

$ egrep -l "OS\ version: 10.6" * | sed -e 's/ /\ /g' | tr '\n' ' ' | xargs cp ~/crashreportstemp

しかし、これにより、cp は最後に渡されたファイル名を最後の cp 引数として扱い、cp への明示的な引数を無視します。

cp: target `2011-05-30 16.23.30.txt' is not a directory

私は明らかにこれを行う正しい方法を見落としています。助けてください!

ありがとう - ジェイソン

4

1 に答える 1

0

次のようなことを試してください:

egrep -l "OS\ version: 10.6" * | sed -e 's/ /\ /g' | tr '\n' ' ' && echo ~/crashreportstemp | xargs cp

お使いのバージョンでは、 ~/crashreportstemp が cp の最後の引数ではなく、最初の引数として渡されます。

于 2011-05-31T16:45:43.280 に答える