Saya menggunakan perintah berikut untuk menghitung baris teks dalam file JAVA:
find . -name '*.java' | xargs wc -l
Bagaimana saya bisa memodifikasi find
parameter perintah agar sesuai dengan lebih dari satu ekstensi file? Sebagai contoh, saya ingin menggunakan operasi di atas untuk file CPP, C, dan H.
find
perintah, karena di situlah Anda mencari file yang cocok.find -print0 | xargs -0
membangun atau bahkan lebih baik dan lebih sederhana:find . -name '*.cpp' -o -name '*.c' -o -name '*.h' -exec wc -l {} +
. Ini akan menghindari masalah nama file (spasi kosong, baris baru dan sebagainya) dan merupakan (sangat) kebiasaan yang baik.Jawaban:
Gunakan
-o
opsi untuk OR. Misalnya, ini akan berisi daftar.cpp
,.c
dan.h
file:sumber
*
perlu lagi melarikan diri jika diformat sebagai kode. Benar-benar mengabaikan itu. :)Anda harus menggunakan opsi -o. Misalnya pernyataan di bawah ini menemukan semua file png, jpg, dan gif dalam folder.
Saya menggunakan opsi -iname sehingga pertandingan tidak peka huruf besar-kecil.
sumber
"-Atau" mengatakan aku sedang mencari salah satu dari keduanya.
Baru-baru ini saya menulis panduan singkat untuk menggunakan find dengan operator boolean di sini: http://jamesfishwick.com/2012/linux-find-and-boolean-operators
sumber
Sementara semua jawaban kurang lebih sama, saya tidak menemukan itu dapat dibaca dengan beberapa nama dan operator Boolean di antara keduanya.
Saya pikir ini mungkin solusi yang lebih elegan:
Mari kita hancurkan ini
find .
menemukan semua file secara rekursif di jalur saat ini (ubah ke beberapa jalur lain jika Anda perlu)-type f
mempersempit pencarian hanya ke file (tidak terlalu banyak kenaikan kecepatan, tapi masih ...)| grep -E
Saya menggunakan ini untuk mendapatkan grep mengenali atau (|
) operator di Mac OS X yang menggunakan grep FreeBSD , GNU grep tidak memerlukan itu (periksaman
file Anda )."\.java$|\.cpp$|\.c$"
ekspresi reguler yang meliputi file yang nama berakhir dengan.java
,.cpp
, dan.c
(yang add Anda perlu)Anda kemudian dapat menyalurkan daftar yang dihasilkan untuk diproses lebih lanjut, misalnya
Contoh ini menghapus
CRLF
akhir baris DOS / Windows untuk OS X / LinuxLF
(ini jugased
sintaks OS X , periksa untuk versi spesifik Anda).sumber