Ketika saya menjalankan find
argumen ini, ia mengembalikan ribuan file:
steven@nook:/mnt/station/media $ sudo find . -not -user steven -or -not -group users | wc
3508 17479 245851
steven@nook:/mnt/station/media $
Ketika saya menambahkan -exec
argumen, berperilaku seolah-olah find
tidak mengembalikan hasil dan kode pengembalian menunjukkan keberhasilan:
steven@nook:/mnt/station/media $ sudo find . -not -user steven -or -not -group users -exec echo {} \;
steven@nook:/mnt/station/media $ echo $?
0
steven@nook:/mnt/station/media $
(Tujuan saya adalah untuk menggunakan -exec chown -v steven:users {} \;
hasil (karenanya sudo
), tetapi saya menggunakan di -exec echo {} \;
atas untuk menggambarkan masalah dengan lebih bersih dan mengesampingkan chown
sebagai faktor yang berkontribusi.)
Saya menggunakan gnu find di bawah stock bash di Ubuntu Xenial:
steven@nook:/mnt/station/media $ find --version
find (GNU findutils) 4.7.0-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
steven@nook:/mnt/station/media $ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
steven@nook:/mnt/station/media $ echo $SHELL
/bin/bash
steven@nook:/mnt/station/media $
sumber
expr1 -or expr2
: "expr2
tidak dievaluasi jikaexpr1
benar". Butuh beberapa waktu untuk memahami mengapa Anda menulis "milik pengguna steven". Tidak begitu jelas.Anda perlu membuat dua koreksi pada baris perintah Anda.
Pertama, kawat gigi dari perintah exec perlu melarikan diri atau dikutip untuk melindungi mereka dari ekspansi oleh shell. Ini secara eksplisit disebutkan di halaman manual find .
Ada juga contoh di halaman manual untuk mengklarifikasi persyaratan ini.
Kedua, ruang lingkup & prioritas
-or
ekspresi perlu diklarifikasi dengan tanda kurung (yang juga harus diloloskan).Dengan koreksi, berikut ini akan berfungsi:
FWIW Saya lebih suka menyalurkan output dari perintah find, dan menggunakan xargs daripada berurusan dengan sintaks
-exec
.sumber