Find'ın -exec komutunda {} + ne anlama geliyor?


23

Ben anlamını bilmek istiyorum {} +içinde execkomuta ve arasındaki fark nedir {} +ve {} \;. Kesin olmak gerekirse, bu ikisi arasındaki fark nedir:

find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;

5
man find(1)Herkes tarafından kolayca bulunabilmesi için çok ayrıntılı olarak açıklanmıştır . Tembel olma.
Miroslav Koškár

Teşekkürler sevgili Miroslav, aradım man exec!

Ah, daha önce hiç {} +kullanmamıştım. Normalde bunun için xargs kullanıyorum (ve sıklıkla find ... -print0 | xargs -0 ...)

Yanıtlar:


27

Kullanımı ;(noktalı) ya da +(artı işareti) tarafından çağrılan kabuk komutları sona erdirmek için zorunludur -exec/ ' execdir.

;(Noktalı virgül) veya +(artı işareti) arasındaki fark , bağımsız değişkenlerin find -exec/ -execdirparametresine nasıl aktarıldıklarıdır . Örneğin:

  • kullanarak ;birden fazla komut yürütür (her bağımsız değişken için ayrı ayrı),

    Misal:

    $ find /etc/rc* -exec echo Arg: {} ';'
    Arg: /etc/rc.common
    Arg: /etc/rc.common~previous
    Arg: /etc/rc.local
    Arg: /etc/rc.netboot
    

    Aşağıdaki tüm argümanlar findkomuta argümanlar olarak alınır.

    Dize {}, işlenmekte olan geçerli dosya adıyla değiştirilir.

  • using +, mümkün olan en düşük komutları yürütür (argümanlar bir araya getirildiği için). xargsKomutun nasıl çalıştığına çok benzer , bu nedenle satır başına maksimum argüman sınırını aşmamak için komut başına mümkün olduğunca fazla argüman kullanır.

    Misal:

    $ find /etc/rc* -exec echo Arg: {} '+'
    Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
    

    Komut satırı, seçilen her dosya adı sonuna eklenerek oluşturulur.

    {}Komut içinde yalnızca bir örneğine izin verilir.

Ayrıca bakınız:


Orada olan bir fark ve büyük bir bir. Bkz user1116056 en cevabı
Jahid

24

Find komutunun üç dosyanın altına düştüğü göz önüne alındığında:

fileA
fileB
fileC

Eğer kullanırsanız -execbir artı (ile +) işareti,

find . -type f -exec chmod 775 {} +  

Olacak:

chmod 775 fileA fileB fileC

Komut satırı, eşleşen her dosya adının sonuna eklenerek xargsoluşturulur; bu , komut satırlarını oluşturan şekilde olur . Komutun toplam çağrı sayısı ( chmodbu durumda), eşleşen dosya sayısından çok daha az olacaktır.

Eğer kullanırsanız -execnoktalı virgülle ( ;),

find . -type f -exec chmod 775 {} \;

Olacak:

chmod 775 fileA
chmod 775 fileB
chmod 775 fileC

5

Başı man find:

-exec komutu {} + -exec eyleminin bu değişkeni, seçilen dosyalarda belirtilen komutu çalıştırır, ancak komut satırı, seçilen her dosya adı sonuna eklenerek oluşturulur; komutun toplam çağrı sayısı, eşleşen dosya sayısından çok daha az olacaktır. Komut satırı, xargs'ın komut satırlarını oluşturduğu gibi oluşturulur. Komutta yalnızca bir {{} örneğine izin verilir. Komut başlangıç ​​dizininde yürütülür.

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.