-Exec xargs ve -print0 kullanımı nedir?


20

Bence bunlar bir komutun sonucunu bir diğerine giriş olarak aktarmanın yaygın yollarıdır.

Bu üçü nasıl çalışır? Veya bazı web siteleri / URL'ler nelerdir?

Yanıtlar:


25

İlk yazacaklar:

man find

man xargs

findVarsayılan olarak standart çıkış komutu, sonuçlar, bu -printseçenek, normal olarak gerekli değil, -print0boşluk veya yeni satır ihtiva eden adları doğru yorumlanabilir böylece 0 (NULL) bayt ile dosya ayırır.

-execSeçenek yerine Xargs kullanımına bir şeydir - Bulma komutu bulduğu her öğe için bir komutu yürütür.

xargsKomutu (genellikle gelen uzay veya yeni satır ayrılmış dizeleri okur bulmak komutu, ancak herhangi bir yere gelebilir) ve her dizesi için bazı komutu yürütür.
Xargs bir -0 seçeneğiyle çalıştırılırsa , NULL ile ayrılmış dizelerin çıktı olarak gelmesini beklerfind ... -print0

Xargs'ın avantajı, dizeleri birlikte gruplayabilmesidir, böylece n komutu yerine yalnızca bir veya iki kez bir komut yürütür .

Yani normal kullanımda:

find start_directory -name '*.txt' | xargs ls -l 

find dosya adlarını listeler ve xargs şu komutları verir:

ls -l file1.txt file2.txt file3.txt ... fileN.txt

Bu da find komutunuzun verilmesinden daha hızlıdır:

ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt

7

Muhtemelen hepsi bu POSIX sözdizimini destekleyen geçerli bulma uygulamalarında xargs'a gerek olmadığını unutmayın:

find directory -name '*.txt' -exec ls -l {} + 

xargs varyantından daha basit ve biraz daha hızlıdır.

find directory -name '*.txt' | xargs ls -l 

xargs 'find -exec' den çok daha az kaynak kullanıyor
Felipe Alvarez

7
Bu tam tersi. Xargs için borular, -exec değerinden biraz daha fazla kaynak kullanır. Muhtemelen "+" sonlandırıcıyı göz ardı edersiniz.
jlliagre

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.