SORU
10 Mayıs 2009, Pazar


Nasıl kullanılır > xargs komutu?

Bana bir dizinde her dosya grep izin ve ayrı bir dosya için grep çıktı yazacak bir bash komut bulmak istiyorum. Benim tahminim böyle bir şey olmalıydı

ls -1 | xargs -I{} "grep ABC '{}' > '{}'.out"

ama, bildiğim kadarıyla, xargs çift tırnak gibi değil. Ben çift tırnak işaretleri kaldırırsanız, ancak, o zaman bu komut, tek bir dosya için tüm komut çıktısı yönlendirir {}''.tek tek dosyaları bir dizi yerine.

Herkes yapmak için bir yol biliyor bu xargs kullanarak mı? Ben sadece xargs kullanmayan herhangi bir çözüm benim için geçerli değil yani xargs ile benim sorunum göstermek için bir örnek olarak bu grep senaryo kullanılır.

CEVAP
10 Mayıs 2009, Pazar


Bunu gibi bir hata yapmayın:

sh -c "grep ABC {} > {}.out"

Bu korkak dosya adları da dahil olmak üzere koşulları çok altında, kıracak ve imkansız değil alıntı. Yapmanız gereken, nedir bu:

sh -c 'grep ABC "$1" > "$1.out"' -- {}

xargs geçerli olarak find.

Bu arada, hiç -0 seçeneği (veri yok etme hakkında endişelenmeme çok nadir ve zaman kontrollü interaktif kullanım için olmadığı sürece) olmadan xargs kullanın.

Ayrıca ls ayrıştırma yok. Hiç. Kullanın veya find yerine genelleme: http://mywiki.wooledge.org/ParsingLs

Özyineleme ve diğer her şey için: bir topak ile basit bir döngü ihtiyacı olan her şey için find kullanın

find /foo -exec sh -c 'grep "$1" > "$1.out"' -- {} \;

ya da non-recursive:

for file in *; do grep "$file" > "$file.out"; done

Tırnak doğru kullanımına dikkat edin.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • JorteexHD

    JorteexHD

    20 NİSAN 2012
  • Phandroid

    Phandroid

    26 Ocak 2009
  • ThePhestor

    ThePhestor

    22 Mart 2011