Bunun arasındaki farkın ne olduğunu bilmek istiyorum
ls | xargs rm
ls | xargs -i{} rm {}
İkisi de benim için çalışıyor
Bunun arasındaki farkın ne olduğunu bilmek istiyorum
ls | xargs rm
ls | xargs -i{} rm {}
İkisi de benim için çalışıyor
Yanıtlar:
xargs rmçağırır rmparametre alanları ile ayrıldı tüm bağımsız değişkenler ile.
xargs -i{} rm {}çağıracağı rm {}argüman her biri için ve {}güncel argüman ile değiştirilecektir.
Eğer 2 bağımsız değişken varsa a.txtve b.txt, xargs rm bu arayacak
rm a.txt b.txt
Ama xargs -i{} rm {}arayacak
rm a.txt
rm b.txt
Bunun nedeni -i, -L 1seçeneğin, komutun her seferinde rmyalnızca 1satır alacağı anlamına gelen seçeneği ima etmesidir . Ve burada her satır sadece 1 argüman içeriyor.
Bu konuda daha fazla fikir edinmek için bu Ideone bağlantısını kontrol edin .
rmönemli değil
-i seçeneği (--replace öğesine eşdeğerdir), xargs'ın yeni aldığı girişi sakladığı bir tür yer tutucu oluşturur. İkinci komutunuzda yer tutucu "{}", find -exec seçeneği gibi çalışır. Bir kez tanımlandığında, xargs bu yer tutucuyu tüm girdi satırıyla değiştirir. "{}" Adından hoşlanmıyorsanız, kendi adınızı tanımlayabilirsiniz:
ls | xargs -iPLACEHOLDER yankı PLACEHOLDER
Sizin durumunuzda, her iki komut da aynı sonucu üretir. İkinci formda, sadece -i seçeneğiyle varsayılan davranışı açıkça belirtiyorsunuz.