Yanıtlar:
-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 find
bir xargs
komut 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.
+
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. :)
-exec <command> {} ';'
yazmamda daha kolay olduğu için tipiktir (türe dokunabilirim ama tam olarak en iyi tekniğe sahip değilim).
-exec ... {} +
. Bakınız: pubs.opengroup.org/onlinepubs/9699919799/utilities/…
-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).
\;
, yürütülen komut olacaktırcat 1; cat 2; cat 3
. İle+
idam komut şu şekilde olacaktırcat 1 2 3
.