'+' (Artı) ve ';' kullanmak arasındaki fark nedir (noktalı virgül) -exec komutunda?


28

Ben ne fark kullanma arasında olduğunu bilmek merak ediyorum +ve ;sonunda -execben de kullandığınızda komuta findkomuta?

find .... -exec ... \; 

VS

find .... -exec ... + 

Yanıtlar:


36

-exec ... \;birbiri ardına bir öğeyi çalıştıracak. Böylece, üç dosyanız varsa, exec satırı üç kez çalışacaktır.

-exec ... {} +Aynı anda birden fazla dosya alabilir komutlar için (örneğin cat, stat, ls). Tarafından bulunan dosyalar findbir xargskomut gibi birbirine zincirlenir . Bu, daha az çatallanma ve küçük işlemler için, önemli bir hızlanma anlamına gelebilir.

İşte 10.000 boş dosya alan bir performans demosu.

$ mkdir testdir
$ touch testdir/{0000..9999}

$ time find testdir/ -type f -exec cat {} \;
real    0m8.622s
user    0m0.452s
sys     0m8.288s

$ time find testdir/ -type f -exec cat {} +
real    0m0.052s
user    0m0.015s
sys     0m0.037s

Yine, bu yalnızca birden fazla dosya adı alabilen komutlarda çalışır. Komutunuzun böyle bir şey olup olmadığını öğrenmek için çalışma sayfasına bakabilirsiniz. İşte özeti man cat:

SYNOPSIS
       cat [OPTION]... [FILE]...

Üç nokta açık [FILE]..., birden fazla dosya alabileceği anlamına gelir.

+yalnızca tek komutlarda kullanılabilir {}ve satırda tam olarak bir tane olması gerekir . \;sıfırdan çoğa gruplarla çalışabilir.


4
Örnek: ile \;, yürütülen komut olacaktır cat 1; cat 2; cat 3. İle +idam komut şu şekilde olacaktır cat 1 2 3.
Alaa Ali

AFAIK, +POSIX değildir, bu nedenle Linux dışı sistemlerde bulunmayabilir. Eğer platformdan asla ayrılmazsanız endişelenmeyin, ancak Solaris'i kullanmanız gerekip gerekmediğini bilmek güzel. :)
Simon Richter

Güzel, bilgi için teşekkürler. Tipik olarak -exec <command> {} ';'yazmamda daha kolay olduğu için tipiktir (türe dokunabilirim ama tam olarak en iyi tekniğe sahip değilim).
hanetzer

2
@SimonRichter: Hayır, POSIX'dir -exec ... {} +. Bakınız: pubs.opengroup.org/onlinepubs/9699919799/utilities/…
cuonglm

@SimonRichter -exec ... {} +Uzatma, 2001 yılında POSIX özelliklerine dahil edilmek üzere önerildi ve 2004 yılında POSIX 6 numaralı konuya onaylandı. Alışkın olduğunuz Solaris sürümü, bu POSIX standardından daha eski (veya daha eski bir sürümü hedefliyor).
Oli
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.