← man/system_admin
xargs — man xargs — 80×24
ugur@toprak:~/man/system_admin$man xargs
Bölüm 1 Sistem Yönetimi

xargs

argüman listeleri oluşturur ve aracı çalıştırır

Özet

      xargs [-0oprt] [-E eofstr] [-I replstr [-R replacements] [-S replsize]] [-J replstr]
	   [-L number] [-n number [-x]] [-P maxprocs] [-s size] [utility [argument ...]]

Açıklama

xargs aracı, standart girdiden boşluk, sekme (tab), yeni satır ve dosya sonu (EOF) ile sınırlandırılmış dizgileri okur ve bu dizgileri argüman olarak kullanarak belirtilen aracı (utility) çalıştırır.

Komut satırında belirtilen tüm argümanlar, her çağrıda araca (utility) iletilir ve ardından xargs'ın standart girdisinden okunan belirli sayıda argüman eklenir. Bu işlem, standart girdi tükenene kadar tekrarlanır.

Boşluklar, sekmeler ve yeni satırlar; tek ( ' '') veya çift ("'') tırnak ya da ters eğik çizgi (``'') kullanılarak argümanların içine yerleştirilebilir. Tek tırnaklar, eşleşen tek tırnağa kadar yeni satırlar hariç tüm tek tırnak dışındaki karakterleri etkisizleştirir (escape). Çift tırnaklar, eşleşen çift tırnağa kadar yeni satırlar hariç tüm çift tırnak dışındaki karakterleri etkisizleştirir. Yeni satırlar dahil herhangi bir tek karakter, ters eğik çizgi ile etkisizleştirilebilir.

Seçenekler aşağıdaki gibidir:

-0, --null xargs'ın boşluk ve yeni satırlar yerine NUL (``\0'') karakterlerini ayırıcı olarak beklemesini sağlar. Bunun, find(1) komutundaki -print0 fonksiyonu ile birlikte kullanılması amaçlanmıştır.

-E eofstr eofstr ifadesini mantıksal bir dosya sonu (EOF) işareti olarak kullanır.

-I replstr Her girdi satırı için aracı (utility) çalıştırır ve aracın argümanlarındaki (eğer -R bayrağı belirtilmemişse en fazla 5 argümanda) replstr ifadesinin bir veya daha fazla örneğini girdinin tüm satırıyla değiştirir. Değiştirme işlemi yapıldıktan sonra ortaya çıkan argümanların boyutu, replsize (eğer -S bayrağı belirtilmemişse 255) baytı aşamaz; bu, replstr içeren argümanın mümkün olduğunca büyük bir kısmının, araca yönelik oluşturulan argümanlara replsize baytına kadar uç uca eklenmesiyle (concatenating) gerçekleştirilir. Boyut sınırı, replstr içermeyen araç argümanlarına uygulanmaz ve ayrıca aracın kendisinde (utility) hiçbir değiştirme yapılmaz. -x seçeneğini ima eder.

-J replstr Eğer bu seçenek belirtilirse, xargs standart girdiden okunan verileri tüm diğer argümanların sonuna eklemek yerine, replstr ifadesinin ilk geçtiği yeri değiştirmek için kullanır. Bu seçenek, girdiden kaç argüman okunacağını (-n) veya xargs'ın üreteceği komut(lar)ın boyutunu (-s) etkilemez. Seçenek yalnızca bu argümanların yürütülen komut(lar) içinde nereye yerleştirileceğini değiştirir. replstr, xargs için ayrı bir argüman olarak görünmelidir. Örneğin, tırnak içine alınmış bir dizginin ortasındaysa tanınmayacaktır. Ayrıca, replstr ifadesinin yalnızca ilk geçtiği yer değiştirilecektir. Örneğin, aşağıdaki komut geçerli dizindeki büyük harfle başlayan dosya ve dizinlerin listesini destdir hedefine kopyalayacaktır:

/bin/ls -1d [A-Z]* | xargs -J % cp -Rp % destdir

-L sayı Okunan her sayı satır için aracı (utility) çağırır. Eğer dosya sonuna (EOF) ulaşılırsa ve sayı değerinden daha az satır okunmuşsa, araç mevcut satırlarla çağrılır.

-n sayı, --max-args=sayı Aracın her çağrısı için standart girdiden alınacak maksimum argüman sayısını belirler. Eğer biriken bayt sayısı (-s seçeneğine bakın) belirtilen boyutu aşarsa veya aracın son çağrısı için sayı değerinden daha az argüman kalmışsa, araç çağrısı sayı değerinden daha az standart girdi argümanı kullanacaktır. sayı için mevcut varsayılan değer 5000'dir.

  • -o: Komutu yürütmeden önce alt işlemde stdin'i /dev/tty olarak yeniden açar. Bu, xargs'ın etkileşimli bir uygulama çalıştırmasını istiyorsanız yararlıdır.

-P maxprocs, --max-procs=maxprocs Paralel mod: Tek seferde en fazla maxprocs sayıda araç çağrısını çalıştırır. Eğer maxprocs 0 olarak ayarlanırsa, xargs mümkün olduğunca çok işlem çalıştıracaktır.

-p, --interactive Çalıştırılacak her komutu ekrana yazdırır (echo) ve kullanıcıya çalıştırılıp çalıştırılmayacağını sorar. POSIX yerel ayarında olumlu bir yanıt (‘y’), komutun çalıştırılmasına neden olur; diğer herhangi bir yanıt komutun atlanmasını sağlar. Eğer işlem bir terminale bağlı değilse hiçbir komut çalıştırılmaz.

-r, --no-run-if-empty GNU xargs ile uyumluluk. GNU xargs sürümü, xargs girdisi boş olsa bile araç argümanını en az bir kez çalıştırır ve bu davranışı engellemek için bir -r seçeneğini destekler. FreeBSD xargs sürümü, boş girdilerde araç argümanını çalıştırmaz, ancak GNU xargs ile komut satırı uyumluluğu için -r seçeneğini destekler; bununla birlikte, -r seçeneği FreeBSD xargs sürümünde hiçbir şey yapmaz.

-R replacements -I seçeneğinin değiştirme yapacağı maksimum argüman sayısını belirtir. Eğer replacements negatifse, değiştirilecek argüman sayısı sınırsızdır.

-S replsize -I seçeneğinin değiştirmeler için kullanabileceği alan miktarını (bayt cinsinden) belirtir. replsize için varsayılan değer 255'tir.

-s boyut, --max-chars=boyut Araca sağlanan komut satırı uzunluğu için maksimum bayt sayısını belirler. Araç adının uzunluğu, araca iletilen argümanlar (NULL sonlandırıcılar dahil) ve mevcut ortamın (environment) toplamı bu sayıya eşit veya bu sayıdan küçük olacaktır. boyut için mevcut varsayılan değer ARG_MAX - 4096'dır.

-t, --verbose Çalıştırılacak komutu, çalıştırılmadan hemen önce standart hataya (stderr) yazdırır.

-x, --exit sayı kadar argüman içeren bir komut satırı, belirtilen (veya varsayılan) komut satırı uzunluğuna sığmıyorsa, xargs'ı hemen sonlandırılmaya zorlar.

Eğer utility belirtilmezse, echo(1) kullanılır.

Eğer araç standart girdiden okuma yaparsa belirsiz davranışlar ortaya çıkabilir.

Bir komut satırı birleştirilemez veya çağrılamazsa ya da bir araç çağrısı bir sinyal ile sonlandırılırsa veya bir araç çağrısı 255 değeriyle çıkış yaparsa, xargs aracı girdi işlemeyi durdurur ve tüm araç çağrılarının işlemleri tamamlandıktan sonra çıkış yapar.

Eski Sürüm Açıklaması

Eski (legacy) modda, -L seçeneği satırın boş olup olmadığına veya bir boşlukla bitip bitmediğine bakılmaksızın tüm yeni satırları satır sonu olarak değerlendirir. Ayrıca, -L ve -n seçenekleri birbirini dışlayan (mutually-exclusive) seçenekler değildir.

Eski mod hakkında daha fazla bilgi için compat(5) kılavuzuna bakın.

Çıkış Durumu

xargs aracı herhangi bir hata oluşmazsa 0 değeriyle çıkış yapar. Eğer araç bulunamazsa xargs 127 değeriyle çıkış yapar; aksi takdirde araç çalıştırılamazsa xargs 126 değeriyle çıkış yapar. Başka bir hata oluşursa, xargs 1 değeriyle çıkış yapar.

Örnekler

     1'den 9'u içeren sayılarla 3x3 bir matris oluşturur. Her echo(1) örneği argüman olarak
     üç satır alır:

	   $ seq 1 9 | xargs -L3 echo
	   1 2 3
	   4 5 6
	   7 8 9

     Standart girdiden gelen her satırı çoğaltır:

	   $ echo -e "one\ntwo\nthree" | xargs -I % echo % %
	   one one
	   two two
	   three three

     Her biri standart girdiden gelen dizinlerden birini kullanmak üzere, en fazla 2 eş zamanlı
     find(1) örneği yürütür:

	   ls -d /usr/local /opt | xargs -J % -P2 -n1 find % -name file

Ayrıca Bakınız

echo(1), find(1), execvp(3), compat(5)

Standartlar

xargs aracının IEEE Std 1003.2 (“POSIX.2”) uyumlu olması beklenmektedir. -J, -o, -P, -R ve -S seçenekleri, diğer işletim sistemlerinde bulunmayabilecek standart dışı FreeBSD uzantılarıdır.

Geçmiş

xargs aracı ilk olarak PWB UNIX sürümünde ortaya çıkmıştır.

Hatalar

Eğer araç, argüman sayısını veya ortam boyutunu artıracak şekilde başka bir komut çağırmaya çalışırsa, execvp(3) fonksiyonunun E2BIG hatası ile başarısız olma riski vardır.

xargs aracı, -I ve -J seçenekleri için dizgi karşılaştırmaları yaparken çoklu bayt (multibyte) karakterleri dikkate almaz, bu da bazı yerel ayarlarda (locale) yanlış sonuçlara yol açabilir.

macOS 26.4 21 Eylül 2020 macOS 26.4