Find / path / -exec komutunda '{}' + ne yapar?


13

Ne var +içinde find /path/ -exec command '{}' +do? aksinefind /path/ -exec command '{}' \;

Yanıtlar:


17

'+' Çalıştırılacak komut sayısını en aza indirmek için bulunan tüm dosyalardan büyük bir komut satırı oluşturur.

Bir find komutunun dört dosya bulması durumunda.

find . -type f -exec command '{}' \;

üretecekti

command file1
command file2
command file3
command file4 

Diğer yandan

find . -type f -exec command '{}' \+

üretir

command file1 file2 file3 file4

3
Eğer biliyorsanız xargs, -exec … {} +aynı yapar -print | xargs …, ancak alıntı sorun olmadan ( -print0 | xargs -0başka bir yoludur, ancak daha az taşınabilir).
Gilles 'SO- kötü olmayı bırak

4

Man sayfasından:

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


1
Adam çok ... terse? Derinlik ve netlikten yoksun olduğunu düşünüyorum.
xenoterracide

Fikir, her dosya için bir işlemi körü körüne ortaya çıkarmak değil, dosya adlarını bir araya getirmek ve komutu daha az kez çağırmaktır. Bir örnek: 3 farklı "rm FILENAME" işlemi oluşturmak yerine dosya adlarını toplar ve "rm FILE1 FILE2 FILE3" yapar.
tante

IIRC'nin bazı xargs sürümlerinde, bu adları belirtilen bir sınıra kadar toplu olarak kullanma seçeneği vardır, bu nedenle bundan yararlanabilirsiniz, ancak büyük bir listeniz olduğunda taşmayı da önleyebilirsiniz.
Kevin Cantu

(Kendini bul, kendi başına korkunç bir küçük dil!)
Kevin Cantu

findbana bir yarı veriyor.
Matt Alexander
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.