Perintah Linux dan Unix menemukan mengeksekusi pencarian file dalam hirarki direktori.
Sintaks untuk perintah find :
temukan [jalur ...] [ekspresi]
Deskripsi
Halaman manual ini mendokumentasikan versi pencarian GNU. Perintah menemukan pencarian pohon direktori yang di-root pada setiap nama file yang diberikan dengan mengevaluasi ekspresi yang diberikan dari kiri ke kanan, sesuai dengan aturan diutamakan (lihat bagian tentang Operator di bawah), sampai hasilnya diketahui; dengan kata lain, sisi kiri adalah false untuk dan operasi, benar untuk atau , pada titik mana find berpindah ke nama file berikutnya.
Argumen pertama yang dimulai dengan:
- -
- ( atau )
- ,
- !
dianggap sebagai awal ekspresi; setiap argumen sebelum itu adalah jalur untuk mencari, dan argumen apa pun setelah itu adalah sisa dari ekspresi. Jika tidak ada jalan yang diberikan, direktori saat ini digunakan. Jika tidak ada ekspresi yang diberikan, ekspresi- cetak digunakan.
Perintah find keluar dengan status 0 jika semua file berhasil diproses, lebih besar dari 0 jika kesalahan terjadi.
Ekspresi
Ekspresi terdiri dari opsi (yang mempengaruhi operasi keseluruhan daripada pemrosesan file tertentu, dan selalu mengembalikan true), tes (yang mengembalikan nilai benar atau salah), dan tindakan (yang memiliki efek samping dan mengembalikan true atau nilai salah), semua dipisahkan oleh operator. Ungkapan- dan diasumsikan di mana operator dihilangkan. Jika ekspresi tidak mengandung tindakan selain -prune , maka -print dilakukan pada semua file yang ekspresinya benar.
Pilihan
Semua opsi selalu mengembalikan nilai true. Mereka selalu berlaku, bukan diproses hanya ketika tempat mereka dalam ekspresi tercapai. Oleh karena itu, untuk kejelasan, yang terbaik adalah menempatkannya di awal ungkapan.
-Mulai hari | Ukur waktu (untuk -amin, -atime, -cmin, -ctime, -mmin, dan -mtime ) dari awal hari ini daripada dari 24 jam yang lalu. |
-kedalaman | Memproses setiap isi direktori sebelum direktori itu sendiri. |
-mengikuti | Tautan simbolis Dereferensi. Implies- noleaf . |
-membantu atau - membantu | Cetak ringkasan penggunaan baris perintah pencarian dan keluar. |
-maxdepth [number] | Turun paling banyak jumlah tingkatan (bilangan bulat non-negatif) dari direktori di bawah argumen baris perintah. Ekspresi -maxdepth 0 berarti hanya menerapkan tes dan tindakan ke argumen baris perintah. |
-mindepth [number] | Jangan menerapkan tes atau tindakan apa pun pada tingkat yang kurang dari angka (bilangan bulat non-negatif). Ekspresi -alam 1 berarti memproses semua file kecuali argumen baris perintah. |
-meningkat | Jangan turunkan direktori pada sistem file lain. Nama alternatif untuk -xdev , untuk kompatibilitas dengan beberapa versi lain dari temuan . |
-noleaf | Jangan optimalkan dengan mengasumsikan bahwa direktori berisi 2 subdirektori lebih sedikit daripada jumlah tautan kerasnya. * |
-versi atau --versi | Cetak nomor versi pencarian dan keluar. |
-xdev | Jangan turunkan direktori pada sistem file lain. |
* Opsi ini diperlukan saat mencari filesystem yang tidak mengikuti konvensi direktori-direktori Unix, seperti sistem file CD-ROM atau MS-DOS atau titik-titik mount volume AFS. Setiap direktori pada sistem file Unix yang normal memiliki setidaknya 2 tautan keras: nama dan namanya . (periode) entri. Selain itu, subdirektorinya (jika ada) masing-masing memiliki .. entri yang terkait dengan direktori itu.
Ketika menemukan sedang memeriksa direktori, setelah itu statted dua subdirektori lebih sedikit dari jumlah link direktori, ia tahu bahwa sisa entri dalam direktori adalah non-direktori (file daun di pohon direktori). Jika hanya nama-nama file yang perlu diperiksa, tidak perlu statistik mereka; ini memberikan peningkatan yang signifikan dalam kecepatan pencarian.
Tes
Argumen numerik dapat ditentukan sebagai:
+ n | Untuk lebih besar dari n. |
-n | Kurang dari n. |
n | Untuk persis n. |
-amin n | File terakhir diakses n beberapa menit yang lalu. |
-lebih baru [file] | File terakhir diakses lebih baru daripada file diubah. -terewer dipengaruhi oleh -Ikuti hanya jika -follow datang sebelum -anewer pada baris perintah. |
-atime n | File terakhir diakses n * 24 jam yang lalu. |
-cmin n | Status file terakhir diubah n menit yang lalu. |
-cnewer [file] | Status file terakhir diubah lebih baru daripada file diubah. - cnewer dipengaruhi oleh -Ikuti hanya jika -Ikuti datang sebelum --mengatur pada baris perintah. |
-kali n | Status file terakhir diubah n * 24 jam yang lalu. |
-kosong | File kosong dan merupakan file biasa atau direktori. |
-Salah | Selalu salah. |
-fstype [type] | File ada di sistem file tipe tertentu. Jenis filesystem yang valid bervariasi di antara versi Unix yang berbeda; daftar tidak lengkap jenis filesystem yang diterima pada beberapa versi Unix atau lainnya adalah: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Anda dapat menggunakan -printf dengan direktif% F untuk melihat jenis-jenis sistem file Anda. |
-gid n | ID grup numerik file adalah n . |
-group [gname] | File milik grup gname (ID grup numerik diizinkan). |
-masih [pola] | Seperti -lname, tapi pertandingan tidak peka huruf besar-kecil. |
-ama [pola] | Seperti -name , tapi pertandingan tidak peka huruf besar-kecil. Misalnya, pola untuk * dan F ?? cocok dengan nama file Foo , FOO , foo , fOo , dll. |
-inum n | File memiliki nomor inode n . |
-ipath [pattern] | Seperti jalan-jalan, tetapi pertandingan tidak peka huruf besar-kecil. |
-iregex [pattern] | Seperti -regex, tapi pertandingan tidak peka huruf besar-kecil. |
-links n | File memiliki n tautan. |
-lname [pattern] | File adalah tautan simbolis yang isinya cocok dengan pola shell. Karakter meta tidak memperlakukan / atau . khususnya. |
-mmin n | Data file terakhir dimodifikasi n menit yang lalu. |
-waktu n | Data file terakhir dimodifikasi n * 24 jam yang lalu. |
-name [pattern] | Basis nama file (jalur dengan direktori terkemuka dihapus) cocok dengan pola shell. Metakarakter ( * , ? , Dan [] ) tidak cocok dengan . di awal nama dasar. Untuk mengabaikan direktori dan file di bawahnya, gunakan -prune ; lihat contoh dalam deskripsi-jalan. |
-newer [file] | File telah dimodifikasi lebih baru daripada file . Ekspresi -newer dipengaruhi oleh -follow hanya jika -follow muncul sebelum -baru pada baris perintah. |
-nouser | Tidak ada pengguna yang sesuai dengan ID pengguna numerik file. |
-nogroup | Tidak ada grup yang sesuai dengan ID grup numerik file. |
-pola [pola] | Nama file cocok dengan pola pola shell. Karakter meta tidak memperlakukan / atau . khususnya; jadi, misalnya, temukan. -path './sr*sc akan mencetak entri untuk direktori bernama ./src/misc (jika ada). Untuk mengabaikan seluruh pohon direktori, gunakan -prune daripada memeriksa setiap file di pohon. Misalnya, untuk melewati direktori src / emacs dan semua file dan direktori di bawahnya, dan mencetak nama-nama file lain yang ditemukan, lakukan sesuatu seperti ini: temukan. -path './src/emacs' -prune -o -print |
-perm [mode] | Bit izin file adalah persis [mode] (oktal atau simbolik). Mode simbolis menggunakan mode 0 sebagai titik keberangkatan. |
-perm -mode | Semua bit izin [mode] diatur untuk file. |
-perm + mode | Setiap bit izin [mode] ditetapkan untuk file. |
-regex [pattern] | Nama file cocok dengan pola ekspresi reguler. Ini adalah kecocokan di seluruh jalur, bukan pencarian. Misalnya, untuk mencocokkan file bernama ./fubar3, Anda dapat menggunakan ekspresi reguler . * Bar. atau . * b. * 3 , tetapi tidak b. * r3 . |
-size n [bckw] | File menggunakan n unit ruang. Satuannya adalah blok-blok 512-byte secara default atau jika b mengikuti n , byte jika c mengikuti n , kilobyte jika k mengikuti n , atau kata-kata 2-byte jika w mengikuti n . Ukurannya tidak menghitung blok tidak langsung, tetapi menghitung blok dalam file jarang yang sebenarnya tidak dialokasikan. |
-benar | Selalu benar. |
-jenis c | File bertipe c : |
b | Block (buffered) spesial |
c | Karakter (unbuffered) khusus |
d | Direktori |
p | Pipa bernama (FIFO) |
f | File biasa |
l | Tautan simbolis |
s | Stopkontak |
D | pintu (Solaris) |
-uid n | ID pengguna numerik file adalah n . |
-gunakan n | File terakhir diakses n hari setelah statusnya terakhir diubah. |
-user uname | File dimiliki oleh pengguna tanpa nama (ID pengguna numerik diperbolehkan). |
-kode c | Sama seperti -type kecuali file adalah tautan simbolis. Untuk tautan simbolik: jika -follow belum diberikan, benar jika file tersebut adalah tautan ke file tipe c ; jika -follow telah diberikan, benar jika c adalah l. Dengan kata lain, untuk tautan simbolis, -type memeriksa tipe file yang -type tidak dicentang. |
Tindakan
perintah -exec;
Jalankan perintah ; true jika status 0 dikembalikan. Semua argumen berikut untuk menemukan diambil menjadi argumen untuk perintah sampai argumen yang terdiri dari `; ' ditemui. String `{} 'diganti dengan nama file yang sedang diproses di mana-mana itu terjadi dalam argumen ke perintah, tidak hanya dalam argumen di mana itu sendiri, seperti dalam beberapa versi menemukan . Kedua konstruksi ini mungkin perlu di-escape (dengan `\ ') atau dikutip untuk melindunginya dari ekspansi oleh shell. Perintah dijalankan di direktori awal.
file -fls
Benar; seperti -lalu tuliskan file seperti -fprint.
-file file
Benar; mencetak nama file lengkap ke file file . Jika file tidak ada ketika ditemukan dijalankan, itu dibuat; jika memang ada, itu terpotong. Nama file `` / dev / stdout '' dan `` / dev / stderr '' ditangani secara khusus; mereka mengacu pada output standar dan output kesalahan standar, masing-masing.
file -fprint0
Benar; seperti -print0 tetapi menulis ke file seperti -fprint.
-file filefff
Benar; seperti -printf tetapi menulis ke file seperti -fprint.
perintah -ok;
Seperti -exec tetapi tanyakan pengguna terlebih dahulu (pada input standar); jika respons tidak dimulai dengan `y 'atau` Y', jangan jalankan perintah, dan kembalikan false.
-mencetak
Benar; cetak nama file lengkap pada output standar, diikuti oleh baris baru.
-print0
Benar; mencetak nama file lengkap pada output standar, diikuti oleh karakter null. Ini memungkinkan nama-nama file yang berisi baris-baris baru diinterpretasikan dengan benar oleh program yang memproses output pencarian .
format -file
Benar; format cetak pada output standar, menafsirkan `\ 'escapes dan arahan`%'. Bidang lebar dan presisi dapat ditentukan seperti dengan fungsi `printf 'C. Tidak seperti-cetak, -printf tidak menambahkan baris baru di akhir string. Pelarian dan arahannya adalah:
\Sebuah
Bel alarm.
\ b
Menghapus.
\ c
Hentikan pencetakan dari format ini segera dan flush output.
\ f
Umpan formulir.
\ n
Garis baru.
r
Kereta kembali.
\ t
Tab horizontal.
\ v
Tab vertikal.
\\
Backslash literal (`\ ').
\ NNN
Karakter yang kode ASCII-nya adalah NNN (oktal).
Karakter `\ 'diikuti oleh karakter lain diperlakukan sebagai karakter biasa, sehingga keduanya dicetak.
%%
Tanda persen literal.
%Sebuah
Waktu akses terakhir file dalam format dikembalikan oleh fungsi C `ctime '.
% A k
Waktu akses terakhir file dalam format yang ditentukan oleh k , yang baik `@ 'atau direktif untuk fungsi C` strftime'. Nilai yang mungkin untuk k tercantum di bawah ini; beberapa dari mereka mungkin tidak tersedia di semua sistem, karena perbedaan `strftime 'antar sistem.
@
detik sejak 1 Januari 1970, 00:00 GMT.
Bidang waktu:
H
jam (00..23)
saya
jam (01..12)
k
jam (0..23)
l
jam (1..12)
M
menit (00..59)
p
lokal AM atau PM
r
waktu, 12 jam (hh: mm: ss [AP] M)
S
kedua (00..61)
T
waktu, 24 jam (jj: mm: dd)
X
representasi waktu lokal (H: M: S)
Z
zona waktu (misalnya, EDT), atau tidak ada apa pun jika tidak ada zona waktu yang dapat ditentukan
Bidang tanggal:
Sebuah
nama hari kerja lokal yang disingkat (Sun..Sat)
SEBUAH
nama hari kerja penuh lokal, panjang variabel (Sunday..Saturday)
b
nama bulan singkatan lokal (Jan..Dec)
B
nama bulan penuh lokal, panjang variabel (Januari..December)
c
tanggal dan waktu locale (Sat Nov 04 12:02:33 EST 1989)
d
hari bulan (01..31)
D
tanggal (bb / dd / yy)
h
sama seperti b
j
hari tahun (001..366)
m
bulan (01..12)
U
jumlah minggu dalam setahun dengan hari Minggu sebagai hari pertama dalam minggu (00..53)
w
hari dalam seminggu (0..6)
W
jumlah minggu dalam setahun dengan hari Senin sebagai hari pertama dalam minggu (00..53)
x
representasi tanggal lokal (mm / dd / yy)
y
dua digit terakhir tahun ini (00..99)
Y
tahun (1970 ...)
% b
Ukuran file dalam blok 512-byte (dibulatkan ke atas).
% c
Waktu perubahan status file terakhir dalam format dikembalikan oleh fungsi C `ctime '.
% C k
Waktu terakhir perubahan status file dalam format yang ditentukan oleh k , yang sama dengan% A.
% d
Kedalaman file dalam pohon direktori; 0 berarti file adalah argumen baris perintah.
% f
Nama file dengan direktori terkemuka dihapus (hanya elemen terakhir).
% F
Jenis sistem file tempat file aktif; nilai ini dapat digunakan untuk -fstype.
% g
Nama grup file, atau ID grup numerik jika grup tidak memiliki nama.
% G
ID grup numerik file.
% h
Memimpin direktori nama file (semua kecuali elemen terakhir).
% H
Argumen baris perintah di bawah file yang ditemukan.
%saya
Nomor inode file (dalam desimal).
% k
Ukuran file dalam 1K blok (dibulatkan ke atas).
% l
Objek tautan simbolis (string kosong jika file bukan tautan simbolis).
% m
Bit izin file (dalam oktal).
% n
Jumlah tautan keras ke file.
% p
Nama file.
% P
Nama file dengan nama argumen baris perintah yang ditemukan telah dihapus.
% s
Ukuran file dalam byte.
% t
Waktu modifikasi file terakhir dalam format dikembalikan oleh fungsi C `ctime '.
% T k
Waktu modifikasi terakhir file dalam format yang ditentukan oleh k , yang sama dengan% A.
% u
Nama pengguna file, atau ID pengguna numerik jika pengguna tidak memiliki nama.
% U
ID pengguna numerik file.
Karakter `% 'diikuti oleh karakter lain dibuang (tetapi karakter lain dicetak).
-memangkas
Jika -depth tidak diberikan, benar; jangan turun dari direktori saat ini.
Jika -depth diberikan, salah; tidak berpengaruh.
-ls
Benar; daftar file saat ini dalam format `ls -dils 'pada output standar. Jumlah blok adalah 1K blok, kecuali variabel lingkungan POSIXLY_CORRECT diatur, dalam hal ini blok 512-byte digunakan.
Operator
Terdaftar dalam urutan penurunan presedensi:
( expr )
Mendahulukan kekuatan.
! expr
Benar jika expr salah.
-tidak expr
Sama dengan ! expr .
expr1 expr2
Dan (tersirat); expr2 tidak dievaluasi jika expr1 salah.
expr1 -a expr2
Sama seperti expr1 expr2 .
expr1 -dan expr2
Sama seperti expr1 expr2 .
expr1 -o expr2
Atau; expr2 tidak dievaluasi jika expr1 benar.
expr1 -atau expr2
Sama seperti expr1 -o expr2 .
expr1 , expr2
Daftar; baik expr1 dan expr2 selalu dievaluasi. Nilai expr1 dibuang; nilai daftar adalah nilai expr2 .
Contoh
temukan / home -user joeTemukan setiap file di bawah direktori / home yang dimiliki oleh pengguna joe.
temukan / usr -name * statTemukan setiap file di bawah direktori / usr berakhiran ".stat".
temukan / var / spool -mtime +60Temukan setiap file di bawah direktori / var / spool yang telah dimodifikasi lebih dari 60 hari yang lalu.
temukan / tmp -name core -type f -print | xargs / bin / rm -fTemukan file bernama inti di atau di bawah direktori / tmp dan hapus. Perhatikan bahwa ini akan bekerja dengan tidak benar jika ada nama file yang berisi baris baru, tanda kutip tunggal atau ganda, atau spasi.
temukan / tmp -name core -type f -print0 | xargs -0 / bin / rm -fTemukan file bernama inti di dalam atau di bawah direktori / tmp dan hapus mereka, pemrosesan nama file sedemikian rupa sehingga file atau nama direktori yang berisi tanda kutip tunggal atau ganda, spasi atau baris baru ditangani dengan benar. Tes -name dilakukan sebelum uji -type untuk menghindari keharusan memanggil stat (2) pada setiap file.
temukan. -type f -exec file '{}' \;Menjalankan `file 'pada setiap file di atau di bawah direktori saat ini. Perhatikan bahwa tanda kurung diapit oleh tanda kutip tunggal untuk melindunginya dari interpretasi sebagai tanda baca skrip shell. Titik koma sama-sama dilindungi oleh penggunaan backslash, meskipun ';' bisa digunakan dalam kasus itu juga.
temukan / \ (-perm -4000 -fprintf /root/suid.txt '% # m% u% p \ n' \), \ \ (-size + 100M -fprintf /root/big.txt '% -10s% p \ n '\)Lintasi filesystem hanya sekali, daftar file dan direktori setuid ke /root/suid.txt dan file besar ke /root/big.txt .
temukan $ HOME -mtime 0Cari file di direktori home Anda yang telah dimodifikasi dalam dua puluh empat jam terakhir. Perintah ini bekerja dengan cara ini karena waktu sejak setiap file terakhir diubah dibagi dengan 24 jam dan sisanya dibuang. Itu berarti untuk mencocokkan -mtime
0 , file harus memiliki modifikasi di masa lalu yang kurang dari 24 jam yang lalu.
temukan. -perma 664Cari file yang memiliki izin baca dan tulis untuk pemiliknya, dan grup, tetapi pengguna lain mana yang dapat membaca tetapi tidak menulis. File yang memenuhi kriteria ini tetapi memiliki bit izin lainnya yang ditetapkan (misalnya jika seseorang dapat mengeksekusi file) tidak akan dicocokkan.
temukan. -perm -664Cari file yang memiliki izin baca dan tulis untuk pemilik dan grup mereka, dan yang dapat dibaca oleh pengguna lain, tanpa memperhatikan keberadaan bit izin tambahan (misalnya bit yang dapat dieksekusi). Ini akan cocok dengan file yang memiliki mode 0777, misalnya.
temukan. -perm / 222Cari file yang dapat ditulis oleh seseorang (pemiliknya, atau grup mereka, atau siapa pun).
temukan. -perm / 220 temukan. -perm / u + w, g + w temukan. -perm / u = w, g = wKetiga perintah ini melakukan hal yang sama, tetapi yang pertama menggunakan representasi oktal dari mode file, dan dua lainnya menggunakan bentuk simbolik. Semua perintah ini mencari file yang dapat ditulis oleh pemilik atau grup mereka. File tidak harus dapat ditulis oleh pemilik dan grup untuk dicocokkan; akan melakukannya.
temukan. -perm -220 temukan. -perm -g + w, u + wKedua perintah ini melakukan hal yang sama; mencari file yang dapat ditulis oleh pemilik dan grup mereka.
temukan. -perm -444 -perm / 222! -perm / 111 temukan. -perm -a + r -perm / a + w! -perm / a + xKedua perintah ini mencari file yang dapat dibaca oleh semua orang (-perm -444 atau -perm -a + r), setidaknya menulis bit set (-perm / 222 atau -perm / a + w) tetapi tidak dapat dieksekusi untuk siapa saja (! -perm / 111 dan! -perm / a + x masing-masing)
Penting: Gunakan perintah man ( % man ) untuk melihat bagaimana perintah digunakan pada komputer khusus Anda.