2011-06-29 6 views
5

は、次のことを考えてみましょう:なぜxargs -Lは適切なフォーマットを生成しますが、xargs -nは正しいフォーマットを生成しません。

$ echo index.html* | xargs -L 1 ls -l 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:18 index.html 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:20 index.html.1 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:21 index.html.2 
-rw-r--r-- 1 zeki zeki 146589 2011-05-05 12:29 index.html.3 
$ echo index.html* | xargs -n 1 ls -l 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:18 index.html 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:20 index.html.1 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:21 index.html.2 
-rw-r--r-- 1 zeki zeki 146589 2011-05-05 12:29 index.html.3 

なぜ-nオプションが不正な書式設定をもたらすのでしょうか?ちょうどその場合、私はUbuntuの下でbashを使用しています。ありがとう。

答えて

12

-L行ごとに分割します。 echoは、出力を行で区切るのではなくスペースで区切るため、単一のls -lが実行され、すべての列がグループとしてフォーマットされます。

-nパラメータで分割します。 -Lまたは-0がない場合、セパレータは空白です(引用符で変更される可能性があります)。したがって、各ファイル名はそれぞれls -lとなり、列幅を調整する方法はありません。

+0

、それに+1を私にビート。 –

+0

ありがとう!今それは明らかです。 –

3

mandates POSIXが標準:

-L

ユーティリティは、各非空numberライン標準入力から引数のために実行しなければなりません。ユーティリティの最後の呼び出しは、数よりも少ない数の引数が残っていれば、より少ない引数の行で実行されます。 の行は、行の最後の文字が<blank>でない限り最初の文字で終わると見なされます。末尾の<blank>は、次の空でない行までのシグナルを継続します。 番号(正の整数)の引数の最大値まで、できるだけ多くの標準的な入力引数を使用

-n

起動ユーティリティ。

(強調を加える。)echo *ためにxargs -L 1ちょうど一度lsへのファイル名のすべてを供給する、単一のラインを生成し、そしてのみ次いでlsうまく列を整列させることができます。

(言い換えれば、あなたの最初のコマンドは、それが正しく空白を含むファイル名を処理しないことを除いて、ls -l index.html*同等です。)

+0

ありがとうございます! –

関連する問題