xargs arasında parantez ve linux olmadan fark nedir


19

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:


19

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 .


HANGİ BİR DAHA İYİ

1
@ user19140477031 hangi işlemi gerçekleştirdiğinize bağlıdır. için rmönemli değil
Shiplu Mokaddim

3

Diş telleri ile rmdosya başına bir işlem ortaya çıkacaktır . Diş telleri olmadan, xargsher rmkomut için mümkün olduğunca çok dosya adı geçirir.

Karşılaştırmak

ls | xargs echo

ve

ls | xargs -i echo '{}'

2

-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.

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.