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
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.
Vim kayıtları nasıl kullanılır?...
Nasıl yansıması genel bir Yöntemi çağı...
Geçişlerini için Dinlenmek nedir ve na...
Nasıl ve kabuk boolean değişkenleri bi...
Raylar 4: nasıl kullanılır(belge)$.() ...