Menggunakan Linux dan Perintah Unix: temukan

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:

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 joe

Temukan setiap file di bawah direktori / home yang dimiliki oleh pengguna joe.

temukan / usr -name * stat

Temukan setiap file di bawah direktori / usr berakhiran ".stat".

temukan / var / spool -mtime +60

Temukan 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 -f

Temukan 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 -f

Temukan 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 0

Cari 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 664

Cari 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 -664

Cari 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 / 222

Cari 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 = w

Ketiga 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 + w

Kedua 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 + x

Kedua 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.