การค้นหารูปภาพ PNG ที่มีขนาดใหญ่กว่า x พิกเซลผ่านเชลล์ลินุกซ์
เมื่อคุณพยายามที่จะเปลี่ยนแปลงการออกแบบเว็บไซต์ของคุณคุณจะต้องเกี่ยวข้องกับความกว้างของรูปภาพในเนื้อหาบทความของคุณ ฉันมีสกรีนช็อตที่มีขนาดใหญ่ฉาวโฉ่ในบทความส่วนใหญ่ที่ฉันเขียนดังนั้นถ้าฉันต้องการเพิ่มแถบด้านข้างมันสำคัญมากที่จะต้องทราบว่ารูปภาพใดบ้างที่กว้างเกินกว่าจะพอดีกับการออกแบบใหม่.
เนื่องจากฉันเป็นโปรแกรมเมอร์มันจะง่ายสำหรับฉันที่จะเขียนแอปพลิเคชันขนาดเล็กเพื่อทำสิ่งนี้ แต่มันทำให้ฉันเริ่มคิด ... ทำไมฉันไม่สามารถทำสิ่งนี้ในบรรทัดคำสั่ง Linux?
สิ่งแรกที่ฉันคิดได้ก็คือภาพ PNG แสดงข้อมูลขนาดเมื่อคุณเรียกใช้คำสั่ง "ไฟล์" ในภาพ:
$ file image3.png
image3.png: ข้อมูลภาพ PNG, 613 x 657, 8 บิต / สี RGBA, ไม่มีการสอดประสาน
มีประโยชน์มากเนื่องจาก 99% ของรูปภาพในเว็บไซต์นี้อยู่ในรูปแบบ PNG ดังนั้นตอนนี้เพื่อโยนมันเป็นวนสำหรับไฟล์ทั้งหมดในไดเรกทอรีอัพโหลดของฉัน:
$ สำหรับ f ใน * .png; do ไฟล์ $ f; เสร็จแล้ว
image.png: ข้อมูลภาพ PNG, 631 x 185, RGBA 8-bit / color, ไม่มีการสอดประสาน
image1.png: ข้อมูลภาพ PNG, 631 x 96, 8 บิต / สี RGBA, ไม่มีการแทรก
image10.png: ข้อมูลภาพ PNG, 375 x 395, 8 บิต / สี RGBA, ไม่มีการสอดประสาน
image11.png: ข้อมูลภาพ PNG, 484 x 241, 8 บิต / สี RGBA, ไม่มีการสอดประสาน
-snipped-
สิ่งนี้มีประโยชน์มากกว่า แต่ฉันต้องดึงข้อมูลลงใน Excel หรือแอปพลิเคชันที่คล้ายกันเพื่อเรียงลำดับข้อมูลดังนั้นฉันจึงตัดสินใจใช้คำสั่ง "ตัด" ของ linux เพื่อดึงออกจากคอลัมน์ความกว้าง.
คุณจะสังเกตเห็นว่าพารามิเตอร์ -f5 บอกให้ตัดเพื่อใช้คอลัมน์ที่ห้าและ -d \ ที่มีช่องว่างหลังจากนั้นบอกให้ตัดเพื่อใช้ช่องว่างเป็นตัวคั่น slash \ character เป็นอักขระเลี่ยงการบอกเชลล์ให้ใช้ช่องว่างเป็นอักขระและไม่เป็นช่องว่าง.
$ สำหรับ f ใน * .png; ทำไฟล์ $ f | cut -f5 -d \; เสร็จแล้ว
631
631
375
484
-snipped-
เอาท์พุทที่มีประโยชน์ไม่ได้ทั้งหมดมันคืออะไร? ลองดันมันผ่าน bash if statement แล้วแสดงผลลัพธ์ของคำสั่ง file เมื่อความกว้างมากกว่า 600 พิกเซล.
สังเกตเห็นเครื่องหมาย '(backtick) รอบ ๆ “ file $ f | ส่วน cut …” ซึ่งระบุว่าคำสั่งภายใน 'จะถูกประมวลผลเป็นเอาต์พุตเดียวและป้อนเข้าในคำสั่ง if ซึ่งเราใช้ -gt (มากกว่า) นอกจากนี้โปรดทราบว่าคุณต้องการช่องว่างรอบ ๆ ทั้งสองข้างของวงเล็บ []
สำหรับ f ใน * .png ให้ทำถ้า ['ไฟล์ $ f | ตัด -f5 -d \ '-gt 600]; จากนั้นยื่น $ f; fi; เสร็จแล้ว
image.png: ข้อมูลภาพ PNG, 631 x 185, RGBA 8-bit / color, ไม่มีการสอดประสาน
image1.png: ข้อมูลภาพ PNG, 631 x 96, 8 บิต / สี RGBA, ไม่มีการแทรก
image17.png: ข้อมูลภาพ PNG, 638 x 340, 8 บิต / สี RGBA, ไม่มีการแทรก
image18.png: ข้อมูลภาพ PNG, 608 x 448, 8-bit / color RGBA, ไม่มีการสอดประสาน
-snipped-
ตอนนี้เรามีรายการไฟล์ทั้งหมดที่กว้างกว่า 600 พิกเซล คุณสามารถปรับ“ file $ f” ในตอนท้ายเพื่อสะท้อนชื่อไฟล์ถ้าคุณต้องการคัดลอกหรือย้ายไปที่อื่น:
สำหรับ f ใน * .png ให้ทำถ้า ['ไฟล์ $ f | ตัด -f5 -d \ '-gt 600]; echo $ f; fi; เสร็จแล้ว
image.png
image1.png
image17.png
image18.png
-snipped-
เปลือก Linux มีประสิทธิภาพอย่างเหลือเชื่อ! โซลูชันนี้ไม่ได้มีประโยชน์สำหรับทุกคน แต่เป็นการดีที่จะรู้วิธีใช้งานเชลล์เพื่อให้คุณสามารถทำงานประเภทนี้ได้เมื่อคุณต้องการ.