Mengapa 'menemukan' tidak memperlihatkan file ini?

21

Menggunakan finddengan grep, satu dapat menemukan file yang cocok dengan pola:

# find | grep error
./solr-modifiedSolr4/SolrPhpClient/phpdocs/errors.html
./error_log
./includes/classes/error_log

Namun, menggunakan findsendiri file pertama tidak ditemukan:

# find . -name error*
./error_log
./includes/classes/error_log

Mengapa tidak findmencari errors.htmlfile saat tidak digunakan dengan grep? Bagaimana cara finddigunakan untuk menampilkan file ini juga?

dotancohen
sumber

Jawaban:

42

Anda perlu mengutip argumen Anda error*karena shell memperluasnya. Jadi apa yang sebenarnya Anda jalankan sekarang adalah find -name error_log, karena itulah shell dapat memperluasnya (ada file bernama error_logdi direktori Anda saat ini).

find . -name 'error*'

Apakah doa yang benar untuk kasus penggunaan Anda.

Dennis Kaarsemaker
sumber
12
sebuah tulisan altenatif adalah find -name error\*- satu kunci lebih sedikit untuk menekan;) ini memiliki efek yang sama, yang *dilewati sebagai tanda bintang untuk perintah find dan tidak diperluas oleh shell Anda
zhenech
3
Ketika mengalami masalah dengan shell (bagaimana ia menginterpretasikan baris perintah Anda dan meneruskan semua argumen dan parameter ke perintah yang sebenarnya), jalankan kembali perintah yang diawali dengan echoperintah. Jadi, jika Anda menjalankannya echo find . -name error*akan find . -name error_log
dihasilkan