Apakah ada cara idiomatis untuk mendeteksi apakah "menemukan" menemukan kecocokan? Saya sedang menggunakan
COUNT=`find ... | wc -l`
if [ "$COUNT" -gt 0 ]; then
tetapi ini tampaknya sedikit tidak langsung bagi saya. Juga, saya ingin berhenti mencari setelah menemukan kecocokan, sehingga tidak membuang waktu dan usaha. Saya hanya perlu tahu apakah ada file yang cocok atau tidak.
Pembaruan: Saya membuat kesalahan dengan menulis pertanyaan saya tanpa kode di depan saya: Saya menggunakan wc -l
dalam kasus yang berbeda, di mana saya perlu mengetahui jumlah total file yang ditemukan. Dalam kasus di mana saya hanya menguji apakah ada kecocokan, saya menggunakan if [ -z $(find …) ]
.
-n
hanya berlaku untuk variabel 'didefinisikan' ($ abc, $ xyz, dll), tapi saya kira $ (...) adalah variabel temp 'didefinisikan' .. +1 ... (dan saya hanya baca baru-baru ini bahwa menggunakan-n
berisiko, kecuali Anda yakin bahwa variabel belum dideklarasikan dan 'tidak digunakan) ... tetapi temp tidak akan memiliki kemungkinan ini ... yaitu. tidak diinisialisasi vs. kosong-n
menguji apakah string kosong, itu tidak ada hubungannya dengan variabel. Apa yang Anda baca mungkin mengatakan bahwa menggunakan-n
tidak menguji apakah variabel didefinisikan:-n "$foo"
salah jikafoo
didefinisikan tetapi kosong, dan menampilkan pesan kesalahan di bawahset -u
.[ -n "${foo+1}" ]
andal menguji apakahfoo
diatur, tetapi memperlakukan variabel kosong dan tidak disetel secara identik biasanya merupakan ide yang baik:,[ -n "${foo:+1}" ]
atau hanya[ -n "$foo" ]
jika Anda tidak khawatirset -u
.-quit
tersedia, tetapi pipa untukhead -n 1
bekerja (seperti halnyahead -c 1
, yang berhenti bahkan lebih awal, tetapi mungkin dengan manfaat yang dapat diabaikan). Juga, saya membuat kesalahan dengan menulis pertanyaan saya tanpa kode di depan saya: Saya menggunakanwc -l
dalam kasus yang berbeda, di mana saya perlu mengetahui jumlah total file yang ditemukan. Dalam kasus di mana saya hanya menguji apakah ada kecocokan, saya menggunakanif [ -z `find … ` ]
.Anda dapat menggunakan
-quit
tindakan untuk berhenti setelah pertandingan pertama. Anda mungkin ingin menggabungkannya dengan tindakan lain (seperti-print
) atau Anda tidak akan dapat mengetahui apakah itu menemukan sesuatu.Misalnya,
find ... -print -quit
akan mencetak jalur file yang cocok pertama dan kemudian keluar. Atau, Anda dapat menggunakan-printf 1 -quit
untuk mencetak 1 jika ada kecocokan dan tidak ada jika tidak ada.find
Status keluar mencerminkan apakah ada kesalahan saat mencari, dan bukan apakah itu menemukan sesuatu, jadi Anda harus memeriksa hasilnya untuk melihat apakah ada kecocokan.sumber
-quit
adalah ekstensi GNU. Ini tidak akan bekerja pada sistem yang menggunakan implementasi find (1) lainnya, seperti OS X, BSD, dan mungkin sebagian besar Unices komersial.Keluar 0 mudah dengan menemukan, keluar> 0 lebih sulit karena biasanya hanya terjadi dengan kesalahan. Namun kita dapat mewujudkannya:
Perhatikan bahwa solusi ini lebih performan daripada menggunakan subkulit; mengeksekusi false tentu saja lebih cepat daripada mengeksekusi bahkan Dash:
sumber
Anda dapat membungkusnya dengan kondisi shell, misalnya:
Di mana
...
kondisi pertandingan Anda, mis-name *.txt
.Beberapa contoh lain:
sumber