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.