"Xargs" Komutunun Örnekleri

Tanım ve Giriş

Xargs komutu genellikle bir komutun çıktısının başka bir komuta giriş argümanları olarak iletildiği bir komut satırında kullanılır.

Birçok durumda, "boru" ve "yönlendirme" operatörleri aynı tip işlemi gerçekleştirdiğinden, bunu gerçekleştirmek için xargs gibi özel bir komut gerekmemektedir. Ancak, bazen temel borulama ve yönlendirme mekanizması ile ilgili sorunlar vardır, örneğin argümanlar boşluk içeriyorsa, xargs'in üstesinden gelir.

Ek olarak, xargs, belirtilen tüm argümanları işlemek için gerekirse, belirtilen komutu tekrar tekrar yürütür. Aslında, xargs'ın belirtilen komutu yürüttüğü her seferinde standart giriş akışından kaç argüman okunması gerektiğini belirtebilirsiniz.

Genelde, bir komutun çıktısı, verilerin aktarıldığı ikinci bir komutun seçeneklerinin veya argümanlarının bir parçası olarak kullanılacaksa, xargs komutu kullanılmalıdır ("|" operatörünün boru operatörü kullanılarak). Verilerin ikinci komutun (standart) girişi olması isteniyorsa, düzenli borulama yeterlidir.

Örneğin, bir dosya adları ve dizinleri listesi oluşturmak için ls komutunu kullanırsanız ve bu listeyi echo yürüten xargs komutuna aktarırsanız, her yinelemede yankı ile kaç dosya adının veya dizin adının işlendiğini belirtebilirsiniz. :

ls | xargs -n 5 echo

Bu durumda, echo bir defada beş dosya veya dizin adı alır. Eko , yeni bir satır karakteri eklediğinden, her satırda beş ad yazılır.

Daha fazla işlem için başka bir komuta iletilen büyük ve öngörülemeyen sayı öğelerini (örneğin dosya adları) veren bir komut çalıştırırsanız, aşırı yüklenmeyi ve kilitlenmeyi önlemek için ikinci komutun aldığı maksimum argüman sayısını denetlemek iyi bir fikirdir.

Aşağıdaki komut satırı, cp komutuna iletilmeden önce 200'ün gruplarını bulup , bunları yedekleme dizinine kopyalarken oluşturulan dosya adlarının akışını bölümlere ayırır .

./ -type f-name "* .txt" -print dosyasını bulun. xargs -l200 -i cp -f {} ./backup

Bul komutundaki "./" öğesi, arama için geçerli dizini belirtir. "-type f" argümanı, aramayı dosyalarla kısıtlar ve "-name" * .txt "bayrağı," .txt "uzantısına sahip olmayan her şeyi filtreler. notasyon, buharın her bir dosya adını gösterir.

Aşağıdaki komut, dizin / tmp içinde veya altında çekirdek adında dosyalar bulur ve bunları siler.

bul / tmp -name göbeği-türü f-izi | xargs / bin / rm -f

Yeni satırlar, tek veya çift tırnak işaretleri veya boşluklar içeren bir dosya adı varsa bu durumun yanlış çalışacağını unutmayın. Aşağıdaki sürüm, dosya isimlerini, tek veya çift tırnak, boşluk veya satır sonu satırları içeren dosya veya dizin adlarının doğru şekilde işleneceği şekilde işler.

find / tmp -name göbeği -type f -print0 | xargs -0 / bin / rm -f

-i seçeneğinin yerine, bu örnekte olduğu gibi komut argümanlarındaki giriş çizgisi ile değiştirilen dizeyi belirten -I işaretini de kullanabilirsiniz:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / kod>

Değiştirme dizesi "{}" olarak tanımlandı. Bu, komut argümanlarındaki "{}" 'nin herhangi bir oluşumunun, boru işlemi boyunca dağıtılmak üzere iletilen giriş elemanı ile değiştirildiği anlamına gelir. Bu, giriş elemanlarını (tekrar tekrar) yürütülecek komutun argümanlarında belirli konumlara yerleştirmenizi sağlar.