Mencari Imej PNG Lebih Besar Daripada x Pixels Melalui Shell Linux
Apabila anda berusaha untuk mengubah reka bentuk laman web anda, anda perlu bimbang dengan lebar gambar dalam kandungan artikel anda. Saya telah mendapat screenshot besar pada sebahagian besar artikel yang saya tulis, jadi jika saya mahu menambah bar sisi, penting untuk mengetahui gambar mana yang akan terlalu luas agar sesuai dengan reka bentuk baru.
Sejak saya seorang pengaturcara, mudah bagi saya untuk menulis permohonan kecil untuk melakukan ini, tetapi ia membuat saya mula berfikir ... mengapa saya tidak boleh melakukan ini pada baris arahan Linux?
Perkara pertama yang saya tahu ialah imej PNG memaparkan data saiz apabila anda menjalankan arahan "fail" pada mereka:
$ file image3.png
image3.png: data imej PNG, 613 x 657, 8-bit / warna RGBA, tidak bersambung
Sangat berguna sejak 99% gambar di laman web ini dalam format PNG. Jadi sekarang untuk membuangnya dalam gelung untuk semua fail dalam direktori muat naik saya:
$ untuk f dalam * .png; lakukan fail $ f; selesai
image.png: data imej PNG, 631 x 185, 8-bit / warna RGBA, tidak bersambung
image1.png: data imej PNG, 631 x 96, 8-bit / warna RGBA, tidak bersambung
image10.png: data imej PNG, 375 x 395, 8-bit / warna RGBA, tidak bersambung
image11.png: data imej PNG, 484 x 241, 8-bit / warna RGBA, tidak bersambung
-snipped-
Ini lebih berguna, tetapi saya perlu tarik data ke dalam Excel atau aplikasi yang sama untuk menyusun data, jadi saya memutuskan untuk menggunakan arahan "cut" linux untuk mengeluarkan hanya lajur lebar.
Anda akan melihat parameter -f5 memotong untuk mengambil lajur kelima, dan -d \ dengan ruang selepas memotong untuk menggunakan ruang sebagai pembatas. The slash \ character adalah karakter melarikan diri untuk memberitahu shell untuk menggunakan ruang sebagai watak, dan bukan sebagai ruang kosong.
$ for f dalam * .png; lakukan fail $ f | cut -f5 -d \; selesai
631
631
375
484
-snipped-
Bukan output yang sepenuhnya berguna, bukan? Mari kita tekankan itu melalui bash jika pernyataan, dan kemudian hanya menunjukkan output arahan fail apabila lebarnya lebih besar daripada 600 piksel.
Perhatikan tanda '(backtick) sekitar "fail $ f | cut ... ", yang menunjukkan bahawa arahan di dalam 'akan diproses sebagai output tunggal dan dimasukkan ke dalam pernyataan jika, di mana kita menggunakan -gt (lebih besar daripada). Juga perhatikan bahawa anda memerlukan ruang di sekeliling kedua kurungan []
untuk f dalam * .png; lakukan jika ['fail $ f | cut -f5 -d \ '-gt 600]; kemudian fail $ f; fi selesai
image.png: data imej PNG, 631 x 185, 8-bit / warna RGBA, tidak bersambung
image1.png: data imej PNG, 631 x 96, 8-bit / warna RGBA, tidak bersambung
image17.png: data imej PNG, 638 x 340, 8-bit / warna RGBA, tidak bersambung
image18.png: data imej PNG, 608 x 448, 8-bit / warna RGBA, tidak bersambung
-snipped-
Sekarang kita mempunyai senarai semua fail yang lebih besar daripada 600 piksel lebar. Anda boleh menyesuaikan "fail $ f" di hujungnya untuk mengulangi nama fail jika anda perlu menyalin atau memindahkannya ke tempat lain:
untuk f dalam * .png; lakukan jika ['fail $ f | cut -f5 -d \ '-gt 600]; kemudian echo $ f; fi; selesai
image.png
image1.png
image17.png
image18.png
-snipped-
Shell Linux sangat kuat! Penyelesaian ini tidak benar-benar praktikal untuk semua orang, tetapi ia adalah baik untuk mengetahui bagaimana untuk bekerja dengan shell supaya anda dapat menyelesaikan tugas jenis ini apabila anda perlu.