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 rm
parametre 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.txt
ve 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 1
seçeneğin, komutun her seferinde rm
yalnızca 1
satı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.