Mencari JAR untuk String (Linux)

Baru-baru ini saya berpikir untuk menulis skrip Groovy untuk mencari JAR untuk string tertentu, tetapi memutuskan untuk mencari alternatif terlebih dahulu daripada menulis skrip. Alternatif tersebut harus mudah digunakan, tersedia secara bebas, dan tidak macet dengan beban ketergantungan. Saya senang saya melihat pertama, karena pendekatan berbasis Linux yang disediakan oleh "jan61" memuaskan kebutuhan saya dengan baik. Dalam posting blog ini, saya melihat contoh itu lebih dekat.

Seperti yang didokumentasikan di utas LinuxQuestions.org yang mencari konten file .class dalam jar (untuk string), perintah baris tunggal di Linux dengan baik melakukan pekerjaan mencari JAR secara rekursif dari direktori tertentu untuk String tertentu. Pencarian ini tidak mencari nama-nama entri itu sendiri di JAR, melainkan mencari konten dari setiap file yang dapat dicari di JAR. Berikut adalah garis sederhana itu (token mewakili string yang akan dicari):

Perintah Linux untuk Mencari Isi File .jar untuk String Tertentu

find . -iname '*.jar' -printf "unzip -c %p | grep -q '' && echo %p\n" | sh 

Saya suka memiliki ini dalam bentuk skrip (atau sebagai alias) karena nama itu lebih mudah diingat daripada mengetikkan seluruh perintah itu setiap saat. Berikut ini contoh skrip yang bisa digunakan.

Bentuk Skrip Linux dari Perintah Di Atas

printf "Searching JARs for string '${1}'...\n" find . -iname '*.jar' -printf "unzip -c %p | grep -q '${1}' && echo %p\n" | sh 

Kedua versi perintah yang ditampilkan tepat di atas akan berfungsi sebagaimana adanya dan sisa posting blog ini berfokus pada cara kerja perintah. Saya mulai menganalisis perintah dari dalam dan bergerak ke luar.

Perintah unzip Linux "daftar [s], uji [s] dan ekstrak [s] file terkompresi dalam arsip ZIP." Itu -cditeruskan ke perintah unzip "ekstrak [s] file ke stdout" dan menyertakan nama file yang diekstrak dengan keluaran standar itu. Ini %pterkait dengan perintah temukan Linux. Lebih khusus lagi, %padalah arahan ke -printfbendera dari findperintah yang mengarahkannya untuk memasukkan nama file yang ditemukan.

Setiap file yang ditemukan dibuka ritsletingnya dan isinya diarahkan ke keluaran standar di mana ia disalurkan ke perintah grep untuk mencari String teks yang disediakan. -qParameter yang diberikan menetapkan mode "diam" di mana tidak ada yang ditulis ke keluaran standar dan grepsegera keluar dengan kode status nol saat mendeteksi kecocokan. Simbol && menunjukkan bahwa perintah echo akan dijalankan untuk mencetak nama file dengan konten yang cocok dengan grep-ed untuk String jika (dan hanya jika) perintah grep mengembalikan status berhasil (0).

Semua hal di atas hanya dijalankan terhadap file dengan .jarekstensi berkat find . -iname '*.jar'perintah. Semuanya disalurkan ke shell.

Terima kasih kepada jan61 untuk perintah Linux elegan yang tercakup dalam posting ini yang memudahkan pencarian konten file di JAR untuk string tertentu.

Pengeposan asli tersedia di //marxsoftware.blogspot.com/ (Terinspirasi oleh Acara Aktual)

Artikel ini, "Mencari JAR untuk String (Linux)" pada awalnya diterbitkan oleh JavaWorld.