Menggunakan Perintah Linux dan Unix: cari

Perintah Linux dan Unix mendapati pencarian untuk fail dalam hirarki direktori.

Sintaks untuk mencari perintah:

cari [laluan ...] [ungkapan]

Penerangan

Halaman manual ini menerbitkan versi mencari GNU. Perintah mencari carian pohon direktori yang di-root pada setiap nama fail yang diberikan dengan menilai ungkapan yang diberikan dari kiri ke kanan, mengikut peraturan yang lebih awal (lihat bahagian di Operator di bawah), sehingga hasilnya diketahui; dengan kata lain, sebelah kiri adalah palsu untuk dan operasi, benar untuk atau , di mana titik mencari bergerak ke nama fail seterusnya.

Hujah pertama yang bermula dengan:

diambil sebagai permulaan ungkapan; apa-apa hujah sebelum ia adalah jalan untuk mencari, dan apa-apa hujah selepas itu adalah ungkapan yang lain. Jika tiada jalan diberikan, direktori semasa digunakan. Jika tiada ekspresi diberikan, ungkapan -print digunakan.

Perintah mencari keluar dengan status 0 jika semua fail berjaya diproses, lebih besar daripada 0 jika ralat berlaku.

Ungkapan

Ungkapan terdiri daripada pilihan (yang mempengaruhi operasi secara keseluruhan dan bukan pemprosesan fail tertentu, dan selalu kembali benar), ujian (yang mengembalikan nilai yang benar atau salah), dan tindakan (yang mempunyai kesan sampingan dan mengembalikan yang benar atau nilai palsu), semuanya dipisahkan oleh pengendali. Ungkapan- dan diandaikan di mana pengendali dihilangkan. Sekiranya ungkapan tersebut tidak mengandungi tindakan selain dari -prune , maka -print dilakukan pada semua fail yang mana ungkapan itu benar.

Pilihan

Semua pilihan sentiasa kembali benar. Mereka sentiasa berkuat kuasa, bukannya diproses hanya apabila tempat mereka dalam ungkapan dicapai. Oleh itu, untuk kejelasan, adalah yang terbaik untuk meletakkan mereka pada permulaan ungkapan.

-dari awal Mengukur masa (untuk -amin, -kalima, -kmin, -kalau, -minang, dan -mtime ) dari awal hari ini berbanding dari 24 jam yang lalu.
-depth Proses kandungan setiap direktori sebelum direktori itu sendiri.
-follow Pautan simbol derefera. Memaksudkan -noleaf .
-help atau - membantu Cetak ringkasan penggunaan baris arahan mencari dan keluar.
-maxdepth [number] Turunkan pada kebanyakan peringkat (integer bukan negatif) direktori di bawah hujah arahan baris. Ungkapan -maxdepth 0 bermaksud hanya menggunakan ujian dan tindakan ke hujah baris perintah.
-mengepth [nombor] Jangan gunakan sebarang ujian atau tindakan pada tahap kurang daripada nombor (integer bukan negatif). Ungkapan -mindepth 1 bermaksud memproses semua fail kecuali argumen baris perintah.
-mount Jangan turun direktori pada fail sistem lain. Nama ganti untuk -xdev , untuk keserasian dengan beberapa carian lain.
-noleaf Jangan mengoptimumkan dengan mengandaikan bahawa direktori mengandungi 2 subdirektori yang lebih sedikit daripada kiraan pautan keras mereka. *
-versi atau - pengalihan Cetak nombor versi carian dan keluar.
-xdev Jangan turun direktori pada fail sistem lain.

* Opsyen ini diperlukan apabila mencari fail sistem yang tidak mengikuti konvensyen pautan direktori Unix, seperti sistem fail CD-ROM atau MS-DOS atau titik gunung kelantangan AFS. Setiap direktori pada sistem fail Unix biasa mempunyai sekurang-kurangnya 2 pautan keras: namanya dannya . kemasukan (tempoh). Selain itu, subdirektori (jika ada) masing-masing mempunyai entri .. yang dikaitkan dengan direktori itu.

Apabila mencari sedang memeriksa direktori, selepas ia mempunyai dua subdirektori yang lebih sedikit daripada kiraan pautan direktori, ia tahu bahawa sisa entri dalam direktori itu bukan direktori (fail daun di dalam pokok direktori). Jika hanya nama-nama fail yang perlu diperiksa, tidak perlu mengesahkannya; ini memberikan peningkatan ketara dalam kelajuan carian.

Ujian

Argumen berangka boleh dinyatakan sebagai:

+ n Lebih besar daripada n.
-n Untuk kurang daripada n.
n Untuk betul-betul n.
-amin n Fail terakhir telah diakses n minit yang lalu.
-menambah [fail] Fail terakhir diakses lebih baru daripada fail diubahsuai. -pengalaman dipengaruhi oleh -follow hanya jika -follow datang sebelum -meningkat pada baris arahan.
-atime n Fail terakhir diakses n * 24 jam yang lalu.
-cmin n Status fail terakhir berubah n minit lalu.
-jennya [fail] Status fail terakhir diubah lebih awal daripada fail diubah suai.
- cnewer terpengaruh oleh -follow hanya jika -follow datang sebelum -tidak pada baris arahan.
-tetika n Status fail terakhir ditukar n * 24 jam yang lalu.
-empty Fail kosong dan sama ada fail biasa atau direktori.
-salah Sentiasa salah.
-jenis [jenis] Fail berada pada sistem fail jenis yang ditentukan. Jenis sistem fail yang sah berbeza-beza di antara versi Unix yang berlainan; senarai lengkap jenis sistem fail yang diterima pada beberapa versi Unix atau yang lain adalah: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Anda boleh menggunakan -printf dengan arahan% F untuk melihat jenis sistem fail anda.
-gid n ID kumpulan angka fail adalah n .
-group [gname] Fail dimiliki oleh gname kumpulan (ID kumpulan angka yang dibenarkan).
-name [corak] Seperti nama, tetapi perlawanan itu tidak sensitif.
-iname [corak] Seperti nama , tetapi perlawanan itu tidak sensitif. Contohnya, corak untuk * dan F ?? padan nama fail Foo , FOO , foo , fOo , dll.
-inum n Fail mempunyai nombor inode n .
-ipat [corak] Seperti -path , tetapi perlawanan itu tidak sensitif.
-iregex [corak] Seperti biasa, tetapi perlawanannya tidak sensitif.
-dalam n Fail mempunyai pautan n .
-lname [corak] Fail ialah pautan simbol yang kandungannya sepadan dengan corak shell. Metacharacters tidak merawat / atau . khasnya.
-mmin n Data fail terakhir dimodifikasi n minit lalu.
-mtime n Data fail terakhir diubah suai n * 24 jam yang lalu.
-name [corak] Asas nama fail (laluan dengan direktori utama dikeluarkan) sepadan dengan corak shell. The metacharacters ( * , ? , Dan [] ) tidak sepadan dengan a . pada permulaan nama asas. Untuk mengabaikan direktori dan fail di bawahnya, gunakan -prune ; lihat contoh dalam perihalan -path .
-newer [file] Fail diubah suai lebih baru-baru ini daripada fail . Ungkapan -newer dipengaruhi oleh -follow hanya jika -follow datang sebelum -newer pada baris arahan.
-nouser Tiada pengguna sepadan dengan ID pengguna angka fail.
-kumpulan Tiada kumpulan sepadan dengan ID kumpulan angka fail.
-path [corak] Nama fail sepadan dengan corak corak shell. Metacharacters tidak merawat / atau . khasnya; jadi, sebagai contoh, cari. -path './sr*sc akan mencetak entri untuk direktori yang dipanggil ./src/misc (jika ada). Untuk mengabaikan pokok direktori keseluruhan, gunakan -prune daripada menyemak setiap fail di dalam pokok. Sebagai contoh, untuk melangkau direktori src / emacs dan semua fail dan direktori di bawahnya, dan mencetak nama fail lain yang dijumpai, lakukan sesuatu seperti ini: cari. -path './src/emacs' -prune -o -print
-perm [mod] Bit kebenaran fail adalah sama [mod] (oktaf atau simbolik). Mod simbolik menggunakan mod 0 sebagai titik berlepas.
-perm-mod Semua bit [ permulaan] kebenaran ditetapkan untuk fail.
-perm + mod Mana-mana bit kebenaran [mod] ditetapkan untuk fail itu.
-regex [corak] Nama fail sepadan dengan corak ekspresi biasa. Ini adalah padanan di seluruh jalan, bukan carian. Sebagai contoh, untuk memadankan fail bernama ./fubar3, anda boleh menggunakan ungkapan biasa . * Bar. atau . * b. * 3 , tetapi tidak b. * r3 .
-size n [bckw] Fail menggunakan n unit ruang. Unit-unit adalah blok 512-byte atau jika b mengikuti n , byte jika c mengikut n , kilobyte jika k mengikuti n , atau perkataan 2-bait jika w mengikut n . Saiz tidak mengira blok tidak langsung, tetapi ia menghitung blok dalam fail jarang yang tidak benar-benar diperuntukkan.
-true Sentiasa benar.
-tipe c Fail adalah jenis c :
b Blok (buffered) istimewa
c Watak (tanpa buatan) istimewa
d Direktori
p Dinamakan paip (FIFO)
f Fail tetap
l Pautan simbolik
s Soket
D pintu (Solaris)
-uid n ID pengguna berangka fail adalah n .
-menggunakan n Fail terakhir diakses n hari selepas statusnya terakhir diubah.
-mengguna uname Fail dimiliki oleh pengguna uname (ID pengguna berangka yang dibenarkan).
-type c Sama seperti -type kecuali fail itu adalah pautan simbolik. Untuk pautan simbol: jika -follow belum diberikan, benar jika fail itu adalah pautan ke fail jenis c ; jika -follow telah diberikan, benar jika c ialah l. Dengan kata lain, untuk pautan simbolik,
-type memeriksa jenis fail yang jenisnya tidak semak.

Tindakan

-exec perintah ;

Jalankan arahan ; benar jika status 0 dikembalikan. Semua hujah-hujah berikut untuk dijumpai akan menjadi hujah kepada perintah sehingga hujah yang terdiri daripada `; ' ditemui. Rentetan `{} 'digantikan oleh nama fail semasa yang diproses di mana-mana ia berlaku dalam argumen kepada arahan, bukan hanya dalam argumen di mana ia bersendirian, seperti dalam beberapa versi cari . Kedua-dua pembinaan ini mungkin perlu melarikan diri (dengan `\ ') atau dipetik untuk melindungi mereka dari pengembangan oleh shell. Perintah ini dilaksanakan dalam direktori permulaan.

-fls fail

Benar; seperti -ls tetapi menulis ke fail seperti -print.

-print file

Benar; cetak nama fail penuh ke dalam fail fail . Jika fail tidak wujud semasa carian dijalankan, ia dibuat; jika ia wujud, ia dipenggal. Nama fail `` / dev / stdout '' dan `` / dev / stderr '' ditangani secara khusus; mereka merujuk kepada keluaran standard dan output kesilapan standard, masing-masing.

-printprint file

Benar; seperti -print0 tetapi menulis ke fail seperti -print.

format fail -fprintf

Benar; seperti -printf tetapi menulis ke fail seperti -print.

perintah -ok;

Seperti -exec tetapi meminta pengguna terlebih dahulu (pada input standard); jika respons tidak bermula dengan `y 'atau` Y', jangan jalankan arahan, dan pulangkan palsu.

-print

Benar; cetak nama fail penuh pada output standard, diikuti dengan baris baru.

-print0

Benar; cetak nama fail penuh pada output piawai, diikuti dengan watak null. Ini membolehkan nama fail yang mengandungi baris-baris baru untuk ditafsirkan dengan betul oleh program yang memproses output mencari .

-printf format

Benar; format cetakan pada output standard, mentafsir `\ 'escapes dan arahan`%'. Lebar dan precisi lapangan boleh ditentukan dengan fungsi `printf 'C. Tidak seperti -print, -printf tidak menambah baris baru pada akhir rentetan. Pelarian dan arahan adalah:

\ a

Loceng penggera.

\ b

Backspace.

\ c

Berhenti mencetak dari format ini serta-merta dan keluarkan output.

\ f

Borang suapan.

\ n

Baris baru.

\ r

Kembalinya kereta.

\ t

Tab mendatar.

\ v

Tab menegak.

\\

Backslash literal (`\ ').

\ NNN

Watak yang kod ASCIInya adalah NNN (oktaf).

Aksara `\ 'yang diikuti oleh watak lain dianggap sebagai watak biasa, sehingga kedua-duanya dicetak.

%%

Satu tanda peratus literal.

% a

Masa capaian terakhir fail dalam format yang dikembalikan oleh fungsi C `ctime '.

% A k

Masa capaian terakhir fail dalam format yang ditentukan oleh k , yang sama ada `@ 'atau arahan untuk fungsi C' strftime. Nilai kemungkinan untuk k disenaraikan di bawah; sesetengah daripada mereka mungkin tidak terdapat pada semua sistem, kerana perbezaan dalam 'strftime' antara sistem.

@

detik sejak 1 Januari 1970, 00:00 GMT.

Bidang masa:

H

jam (00..23)

Saya

jam (01..12)

k

jam (0..23)

l

jam (1..12)

M

minit (00..59)

p

AM atau PM locale

r

masa, 12 jam (hh: mm: ss [AP] M)

S

kedua (00..61)

T

masa, 24 jam (hh: mm: ss)

X

perwakilan masa tempatan (H: M: S)

Z

zon waktu (misalnya, EDT), atau tiada jika tiada zon waktu ditentukan

Bidang tarikh:

a

Nama ringkas hari kerja tempatan (Sun..Sat)

A

nama penuh hari tempatan setempat, panjang berubah (Ahad .. Sabtu)

b

nama bulan disingkat locale (Jan..Dec)

B

nama penuh bulan locale, panjang berubah-ubah (Januari-Disember)

c

tarikh dan masa locale (Sat Nov 04 12:02:33 EST 1989)

d

hari bulan (01..31)

D

tarikh (mm / dd / yy)

h

sama seperti b

j

hari tahun (001..366)

m

bulan (01..12)

U

minggu bilangan tahun dengan Ahad sebagai hari pertama minggu (00..53)

w

hari minggu (0..6)

W

bilangan minggu tahun dengan hari Isnin sebagai hari pertama minggu (00..53)

x

perwakilan tarikh tempatan (mm / dd / yy)

y

dua digit terakhir tahun (00..99)

Y

tahun (1970 ...)

% b

Saiz fail dalam blok 512-bait (bulat).

% c

Masa perubahan status terakhir fail dalam format yang dikembalikan oleh fungsi C `ctime '.

% C k

Masa perubahan status terakhir fail dalam format yang ditentukan oleh k , yang sama dengan% A.

% d

Kedalaman fail dalam pokok direktori; 0 bermaksud fail adalah argumen baris perintah.

% f

Nama fail dengan mana-mana direktori utama dikeluarkan (hanya elemen terakhir).

% F

Jenis sistem fail fail dihidupkan; nilai ini boleh digunakan untuk -fungsi.

% g

Nama kumpulan fail, atau ID kumpulan angka jika kumpulan itu tiada nama.

% G

ID kumpulan angka fail.

% h

Direktori utama nama fail (semua tetapi unsur terakhir).

% H

Argumen baris perintah di bawah fail yang dijumpai.

% i

Nombor inode fail (dalam perpuluhan).

% k

Saiz fail dalam blok 1K (bulat).

% l

Objek pautan simbolik (rentetan kosong jika fail bukan pautan simbolik).

% m

Bit kebenaran fail (dalam oktaf).

% n

Bilangan pautan keras untuk fail.

% p

Nama fail.

% P

Nama fail dengan nama hujah arahan baris di mana ia dijumpai dikeluarkan.

% s

Saiz fail dalam bait.

% t

Masa pengubahsuaian terakhir fail dalam format yang dikembalikan oleh fungsi C `ctime '.

% T k

Masa pengubahsuaian terakhir fail dalam format yang ditentukan oleh k , yang sama dengan% A.

% u

Nama pengguna fail, atau ID pengguna angka jika pengguna tidak mempunyai nama.

% U

ID pengguna angka fail.

Aksara `% 'diikuti oleh mana-mana aksara lain dibuang (tetapi aksara lain dicetak).

-prune

Sekiranya -depth tidak diberikan, benar; jangan turun direktori semasa.
Jika -depth diberikan, palsu; tiada kesan.

-ls

Benar; senarai fail semasa dalam format `ls-dils 'pada output standard. Tuntutan blok adalah blok 1K, melainkan pembolehubah persekitaran POSIXLY_CORRECT ditetapkan, di mana blok 512-bait digunakan.

Pengendali

Disenaraikan demi mengurangkan prioriti:

( expr )

Tuntut keutamaan.

! expr

Benar jika expr salah.

-not expr

Sama seperti ! expr .

expr1 expr2

Dan (tersirat); expr2 tidak dinilai jika expr1 adalah palsu.

expr1 -a expr2

Sama seperti expr1 expr2 .

expr1- dan expr2

Sama seperti expr1 expr2 .

expr1 -o expr2

Atau; expr2 tidak dinilai jika expr1 adalah benar.

expr1 -or expr2

Sama seperti expr1 -o expr2 .

expr1 , expr2

Senarai; kedua expr1 dan expr2 sentiasa dinilai. Nilai expr1 dibuang; nilai senarai adalah nilai expr2 .

Contoh

cari / home -user joe

Cari setiap fail di bawah direktori / rumah yang dimiliki oleh pengguna joe.

cari / usr -name * stat

Cari setiap fail di bawah direktori / usr yang berakhir di ".stat".

cari / var / spool -mtime +60

Cari setiap fail di bawah direktori / var / spool yang diubahsuai lebih daripada 60 hari yang lalu.

cari / tmp -name core -type f -print | xargs / bin / rm -f

Cari fail bernama teras dalam atau di bawah direktori / tmp dan padamnya . Perhatikan bahawa ini akan berfungsi dengan tidak betul jika terdapat sebarang nama fail yang mengandungi baris baru, petikan tunggal atau berganda, atau ruang.

cari / tmp -name core -type f -print0 | xargs -0 / bin / rm -f

Cari fail bernama teras dalam atau di bawah direktori / tmp dan padamnya , memproses nama fail sedemikian rupa sehingga nama fail atau direktori yang mengandungi petikan tunggal atau berganda, ruang atau baris baru dikendalikan dengan betul. Ujian nama-nama datang sebelum ujian jenis - jenis untuk mengelakkan daripada memanggil stat (2) pada setiap fail.

cari . -type f -exec file '{}' \;

Menjalankan `fail 'pada setiap fail di dalam atau di bawah direktori semasa. Perhatikan bahawa pendakap dilampirkan dalam tanda petikan tunggal untuk melindungi mereka daripada tafsiran sebagai tanda baca skrip shell. Tanda titik semacam itu juga dilindungi oleh penggunaan backslash, walaupun ';' boleh digunakan dalam kes itu juga.

cari / \ (-perm -4000 -fprintf /root/suid.txt '% # m% u% p \ n' \), \ \ (-size + 100M -fprintf /root/big.txt ' p \ n '\)

Melintasi sistem fail sekali sahaja, menyenaraikan fail setuid dan direktori ke dalam /root/suid.txt dan fail besar ke /root/big.txt .

cari $ HOME -mtime 0

Mencari fail dalam direktori rumah anda yang telah diubahsuai dalam 24 jam terakhir. Perintah ini berfungsi dengan cara ini kerana masa sejak setiap fail diubahsuai terakhir dibahagikan dengan 24 jam dan sebarang baki dibuang. Ini bermakna bahawa untuk perlawanan -mtime

0 , fail akan mempunyai pengubahsuaian pada masa lalu yang kurang daripada 24 jam yang lalu.

cari . -perm 664

Cari fail yang telah membaca dan menulis kebenaran untuk pemiliknya, dan kumpulan, tetapi yang pengguna lain boleh membaca tetapi tidak menulis kepada. Fail yang memenuhi kriteria ini tetapi mempunyai set bit kebenaran lain (contohnya jika seseorang boleh melaksanakan fail) tidak akan dipadankan.

cari . -perm -664

Cari fail yang telah membaca dan menulis kebenaran untuk pemilik dan kumpulan mereka, dan yang pengguna lain boleh membaca, tanpa mengambil kira kehadiran sebarang bit kebenaran tambahan (contohnya bit boleh laku). Ini akan sepadan dengan fail yang mempunyai mod 0777, contohnya.

cari . -perm / 222

Cari fail yang boleh ditulis oleh seseorang (pemiliknya, atau kumpulan mereka, atau orang lain).

cari . -perm / 220 cari. -perm / u + w, g + w find. -perm / u = w, g = w

Ketiga perintah ini melakukan perkara yang sama, tetapi yang pertama menggunakan perwakilan oktal mod file, dan dua lainnya menggunakan bentuk simbolik. Perintah ini semua mencari fail yang boleh ditulis oleh pemilik atau kumpulan mereka. Fail tidak perlu ditulis oleh pemilik dan kumpulan untuk dipadankan; sama ada akan lakukan.

cari . -perm -220 cari. -perm -g + w, u + w

Kedua-dua perintah ini melakukan perkara yang sama; cari fail yang boleh ditulis oleh pemilik dan kumpulan mereka.

cari . -perm -444 -perm / 222! -perm / 111 cari. -perm -a + r -perm / a + w! -perm / a + x

Kedua-dua arahan kedua-dua carian untuk fail yang boleh dibaca untuk semua orang (-perm -444 atau -perm -a + r), sekurang-kurangnya set set tulis (-perm / 222 atau -perm / a + w) tetapi tidak boleh laksana untuk sesiapa sahaja (! -perm / 111 dan! -perm / a + x masing-masing)

Penting: Gunakan arahan lelaki ( % man ) untuk melihat bagaimana arahan digunakan pada komputer tertentu anda.