Saya ingin tahu bahwa apa perbedaan antara menggunakan +
dan ;
pada akhir -exec
perintah ketika saya menggunakan dalam find
perintah?
find .... -exec ... \;
VS
find .... -exec ... +
-exec ... \;
akan menjalankan satu item demi satu. Jadi jika Anda memiliki tiga file, baris exec akan berjalan tiga kali.
-exec ... {} +
adalah untuk perintah yang dapat mengambil lebih dari satu file sekaligus (mis cat
. stat
, ls
). File yang ditemukan oleh find
dirantai bersama seperti xargs
perintah. Ini berarti lebih sedikit forking out dan untuk operasi kecil, dapat berarti peningkatan yang substansial.
Berikut ini adalah demo kinerja yang menghasilkan 10.000 file kosong.
$ 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
Sekali lagi ini hanya bekerja pada perintah yang dapat mengambil banyak nama file. Anda dapat bekerja jika perintah Anda seperti itu dengan melihat halaman manualnya. Berikut sinopsis dari man cat
:
SYNOPSIS
cat [OPTION]... [FILE]...
Ellipsis aktif [FILE]...
berarti dapat mengambil lebih dari satu file.
+
hanya dapat digunakan pada perintah tunggal dan Anda harus memiliki tepat satu {}
di baris. \;
dapat beroperasi dengan beberapa grup zero-to-many.
\;
, perintah yang dieksekusi adalahcat 1; cat 2; cat 3
. Dengan+
, perintah yang dieksekusi adalahcat 1 2 3
.+
ini bukan POSIX, jadi mungkin tidak tersedia pada sistem non-Linux. Bukan masalah jika Anda tidak pernah meninggalkan platform, tetapi senang mengetahui jika Anda harus menggunakan Solaris. :)-exec <command> {} ';'
karena lebih mudah pada pengetikan saya (saya bisa menyentuh tipe tapi saya tidak punya teknik terbaik).-exec ... {} +
adalah POSIX. Lihat: pubs.opengroup.org/onlinepubs/9699919799/utilities/…-exec ... {} +
Ekstensi tersebut disarankan untuk dimasukkan ke dalam spesifikasi POSIX pada tahun 2001 dan diratifikasi menjadi edisi POSIX 6 pada tahun 2004. Kemungkinan versi Solaris yang Anda gunakan lebih tua dari standar POSIX (atau hanya menargetkan versi sebelumnya).