1

-lフラグをxargsおよびgrepと組み合わせて渡したときに、lsが機能しないのはなぜですか?

$ ls -rt | xargs grep xyz

動作しますが:

$ ls -lrt | xargs grep xyz
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
4

2 に答える 2

3

の出力ls -lは次のようになるためです。

-rw-r--r-- 1 root  root  1491872 2012-11-22 03:07 Xvfb_screen0

これを xargs( ls -l | xargs grep xyz) にパイプすると、grep コマンドが

grep xyz -rw-r--r-- 1 root  root  1491872 2012-11-22 03:07 Xvfb_screen0

そして、それは意味がありません。

編集

ここで @vladr コメントに回答するには、コメント ボックスよりも書式設定が優れているためです。xargs の入力からの空白で区切られた各テキストは、実行されたコマンドに新しいパラメーターとして渡されます。

$ ls -l 
total 4
-rwxrwxr-x 1 carlos carlos 18 2012-11-22 15:17 foo

$ cat foo
#!/bin/sh
echo $#

$ ls -l | xargs ./foo
10

xargs区切り文字をに設定することで、あなたが言うように振る舞うことができます\n

$ ls -l | xargs -d '\n' ./foo
2
于 2012-11-22T14:11:43.017 に答える
2

あなたの質問に答えるには、具体的には を使用しますls -lrt | xargs grep xyz --( に注意してください。これは、その後に表示される--すべてのダッシュが、オプション フラグとしてではなく、文字どおりに解釈されることを意味します。コマンドの展開先については、 @CarlosCampderrós の回答を参照してください) 。使用されているように、有用なものを達成する可能性は低いため、最初から正しいセットアップを行ってください。-

xyzすべてのファイルを時系列の逆順に grep しようとしている可能性が高いです。その場合は、 ( dash-ellではなくls -1rt | xargs grep xyz --、 dash-one に注意してください。)は、この場合は完全にオプションです (1 つまたは複数のファイルの名前が dash で始まると予想される場合を除きます)。-1-l---

于 2012-11-22T14:04:34.983 に答える