7

私は持っている

~/bashpractice$ ls
dir3 dir1   

私は得る

~/bashpractice$ xargs ls -l 
dir1 dir3
dir1:
total 0
-rw-r--r-- 1 abc abc 0 2011-05-23 10:19 file1
-rw-r--r-- 1 abc abc 0 2011-05-23 10:19 file2

dir3:
total 0
-rw-r--r-- 1 abc abc 0 2011-05-23 10:20 file1
-rw-r--r-- 1 abc abc 0 2011-05-23 10:20 file2

しかし、実行するとエラーが発生します

~/bashpractice$ xargs -0 ls -l
dir1 dir3
ls: cannot access dir1 dir3
: No such file or directory

abc@us-sjc1-922l:~/bashpractice$ xargs -0 ls -l
dir1
dir3 
ls: cannot access dir1
dir3
: No such file or directory

xargs に -0 オプションを指定してリストを取得するには?

4

2 に答える 2

19

たとえば、man xargs

-0 スペースや改行の代わりに、NUL (``\0'') 文字をセパレータとして期待するように xargs を変更します。これは、find(1) の -print0 関数と組み合わせて使用​​することが期待されています。

find . -print0 | xargs -0 echo

は xargs に 1 つの-0ことを伝えます:「入力をスペースで区切らないで、NULL 文字で区切ってください」。space通常、名前に含まれるファイルやディレクトリを処理する必要がある場合は、find と組み合わせて使用​​ すると便利です。

再生できるコマンドは他にもあります-print0- たとえばgrep -z.

編集 - コメントに基づく:

セスの答えまたはこれを参照してください:

ls -1 | perl -pe 's/\n/\0/;' > null_padded_file.bin
xargs -0 < null_padded_file.bin

しかし、それは奇妙です。使用する必要がないのに、なぜ使用したいの-0ですか? . 「存在しないのに、なぜファイルを削除したいのですか?」のように。簡単に-0言えば、入力がヌルで埋められている場合、組み合わせでのみ使用する必要があります。限目。:)

于 2011-05-25T19:19:35.797 に答える
3

xargs は、あなたが思っているよりも異なった働きをします。入力を受け取り、入力から読み取ったデータを使用して、引数として提供されたコマンドを実行します。例えば:

find dir* -type f -print0 | xargs -0 ls -l

ls -d dir* | xargs '-d\n' ls -l

look foo | xargs echo

look foo | perl -pe 's/\n/\0/;' | xargs -0 echo

入力にスペースや改行が含まれている可能性があると思われる場合は -0 を使用することが多いため、デフォルトの引数区切り文字 "\s" (正規表現 \s、スペース、タブ、改行) は適切ではありません。

于 2011-05-25T19:18:32.110 に答える