Apakah ada find
program alternatif dengan antarmuka CLI yang lebih konvensional? find
bekerja dan mengharapkan parameter dengan cara yang sangat berbeda dari sebagian besar utilitas lain.
Klarifikasi: Saya mencari sebuah program yang sebagian besar fungsinya hampir sama dengan find dengan antarmuka commandline yang berfungsi dan terasa seperti rekomendasi commandline POSIX (atau setidaknya GNU).
command-line
software-rec
find
utilities
Tamás Szelei
sumber
sumber
ack
dan bertanya-tanya apakah ada yang lebih baikfind
juga.Jawaban:
Ini adalah kesalahpahaman umum.
Temukan mengikuti sintaks opsi. Anda hanya membingungkan pendahuluan ekspresi dengan opsi:
Alternatifnya adalah temukan. Tetapi menemukan mengimplementasikan sintaks ekspresi sendiri karena menyediakan seperangkat lebih kaya opsi filter dan aksi. Tidak ada alternatif yang dapat melakukan hal yang sama, hanya karena itu akan berlebihan.
sumber
find
"mengharapkan parameter dengan cara yang sangat berbeda dari sebagian besar utilitas lain". Anda menyatakan bahwa OP adalah "membingungkan ekspresi primer dengan opsi". Apakah sebagian besar utilitas lain bahkan memiliki konsep "ekspresi primer"? Jika tidak, bukankah itu menunjukkan poin OP? Dan itu benar-benar bukan bagian yang paling aneh dari penggunaanfind
. Apa yang melibatkan CLI lainnya{}
(yang tentu saja harus dihindari entah bagaimana)?Itu tergantung pada fungsi tepat
find
yang Anda andalkan. Jika (terutama) fungsi penemuan, beberapa shell mendukung gumpalan rekursif. Misalnya, denganzsh
:Zsh memiliki lebih banyak kemungkinan seperti menemukan melalui kualifikasi glob (lihat menjelang akhir
man zshexpn
). Sebagai contoh:ls -l **/*(.)
≈find -type f -ls
ls *(m-2u:$USER:)
≈find -mtime -2 -user $USER
Bash 4 juga memiliki
**/
(Anda harus mengaktifkannya denganshopt -s globstar
), tetapi tidak seperti kualifikasi glob.sumber
Saya akan melihat
locate
. Ini akan melihat melalui database file dan dengan cepat mencetak nama jalur yang cocok dengan apa yang Anda berikan.Seperti yang Anda lihat, ini adalah kecocokan sub-teks: jika Anda memberikannya
odg
, maka itu akan cocok dengan dg odg e. Tetapi jika Anda memberikannya.odg
, maka itu tidak akan terjadi.Namun ada satu kelemahannya: ia membutuhkan database. Basis data ini perlu diperbarui ketika ada perubahan. Instalasi Fedora 13 saya memasukkan ini ke crontab harian.
sumber
locate
Apa yang kamu coba temukan? Jika Anda biasanya mencari file kode sumber, lihatlah
ack
. Ini pada dasarnya alat pencarian kode sumber, tetapi-f
saklar ack akan menemukan file yang cocok dengan tipe file yang diberikan.Jadi, jika Anda ingin menemukan semua file Perl dalam direktori, misalnya, cukup:
Jika Anda tidak suka tipe file yang dikenali ack, Anda dapat menambahkan milik Anda di
~/.ackrc
.ack bukan pencari file untuk keperluan umum
find
, tetapi jika Anda bekerja dengan kode sumber, ini bisa sangat berguna.sumber
silversearcher-ag
paket pada distro utama.Salah satu hal hebat yang harus dipelajari oleh setiap programmer adalah: Jika Anda tidak dapat menemukan alat, buat sendiri!
Saya mungkin menulis yang lebih baik, dengan
-t
menyaring jenis, dll.Sunting : Di atas adalah skrip Bash. Dibutuhkan argumen baris perintah dan meneruskannya untuk menemukan sebagai nilai opsi -name. Contoh sederhana saja. Karena saya memasang jawaban ini, saya menemukan skrip python ini:
https://github.com/sjl/friendly-find/
Antarmukanya terlihat bagus, tapi saya belum menguji kinerjanya. Mungkin patut dicoba.
sumber
$<
tidak melakukan sesuatu yang berguna di Bash saya. Apa yang Anda harapkan? Apakah yang Anda maksud"$@"
sebenarnya? Atau"$1"
(yang pada dasarnya apa artinya ini di Makefile)?$<
adalahcsh
setara denganread
- Saya menduga ia berarti bahwa.Cara paling standar untuk menemukan sesuatu di unix's.
sumber
grep | awk
adalah antipattern. Lihat penggunaan tidak bergunagrep
. Jika Anda ingin membuat parametris pola, mungkindu -a | awk -v "pat=<pattern>" '$0 ~ pat { print $2 }'
awk
, tetapi salah satu keuntungan besar dari filosofi UNIX adalah bahwa seseorang tidak perlu memahami semua fitur dari alat yang lebih kompleks (sepertiawk
danfind
) untuk membangun jaringan pipa yang dapat melakukan yang diinginkan tugas.grep | awk
mungkin tidak optimal (atau, pada sistem multithread yang berkinerja tinggigrep
, mungkin saja itu!), tetapi sederhana .