Apa arti dari {} + dalam perintah -exec find?


23

Aku ingin tahu arti dari {} +dalam execperintah, dan apa perbedaan antara {} +dan {} \;. Tepatnya, apa perbedaan antara keduanya:

find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;

5
Ini dijelaskan dalam man find(1)banyak detail, mudah ditemukan oleh siapa pun. Jangan malas.
Miroslav Koškár

Terima kasih, Miroslav, saya mencari man exec!

Ah, saya belum pernah menemukan {} +penggunaan sebelumnya. Saya biasanya menggunakan xargs untuk itu (dan sering find ... -print0 | xargs -0 ...)

Jawaban:


27

Menggunakan ;(titik koma) atau +(tanda plus) adalah wajib untuk mengakhiri perintah shell yang dipanggil oleh -exec/ execdir.

Perbedaan antara ;(titik koma) atau +(tanda tambah) adalah bagaimana argumen diteruskan ke parameter -exec/ find -execdir. Sebagai contoh:

  • menggunakan ;akan mengeksekusi banyak perintah (secara terpisah untuk setiap argumen),

    Contoh:

    $ find /etc/rc* -exec echo Arg: {} ';'
    Arg: /etc/rc.common
    Arg: /etc/rc.common~previous
    Arg: /etc/rc.local
    Arg: /etc/rc.netboot
    

    Semua argumen berikut finddianggap sebagai argumen untuk perintah.

    String {}diganti oleh nama file saat ini sedang diproses.

  • menggunakan +akan mengeksekusi perintah sekecil mungkin (karena argumen digabungkan bersama). Ini sangat mirip dengan cara xargskerja perintah, sehingga akan menggunakan sebanyak mungkin argumen per perintah untuk menghindari melebihi batas maksimum argumen per baris.

    Contoh:

    $ find /etc/rc* -exec echo Arg: {} '+'
    Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
    

    Baris perintah dibangun dengan menambahkan setiap nama file yang dipilih di akhir.

    Hanya satu instance dari {}yang diizinkan dalam perintah.

Lihat juga:


Ada adalah perbedaan dan satu besar. Lihat jawaban user1116056
Jahid

24

Mengingat bahwa perintah find terdapat di bawah tiga file:

fileA
fileB
fileC

Jika Anda menggunakan -execdengan tanda tambah ( +),

find . -type f -exec chmod 775 {} +  

boleh jadi:

chmod 775 fileA fileB fileC

Baris perintah dibangun dengan menambahkan setiap nama file yang cocok di akhir, yang dengan cara yang sama xargsmembangun baris perintahnya. Jumlah total doa perintah ( chmod, dalam kasus ini) akan jauh lebih sedikit daripada jumlah file yang cocok.

Jika Anda menggunakan -execdengan titik koma ( ;),

find . -type f -exec chmod 775 {} \;

boleh jadi:

chmod 775 fileA
chmod 775 fileB
chmod 775 fileC

5

Sesuai man find:

-exec command {} + Varian aksi -exec ini menjalankan perintah yang ditentukan pada file yang dipilih, tetapi baris perintah dibangun dengan menambahkan setiap nama file yang dipilih di akhir; jumlah total doa perintah akan jauh lebih sedikit daripada jumlah file yang cocok. Baris perintah dibangun dengan cara yang sama seperti xargs membangun baris perintahnya. Hanya satu instance dari '{}' diizinkan dalam perintah. Perintah dijalankan di direktori awal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.