GNU/Linux >> Belajar Linux >  >> Linux

Cara menyalin gambar secara massal hanya dengan ukuran tertentu di Linux

Lihatlah, masalah yang menarik - atau persyaratan, jika Anda mau. Anda memiliki folder yang penuh dengan gambar, katakanlah puluhan atau ratusan. Dan mereka memiliki ukuran yang berbeda, katakanlah tinggi 480 atau 600 atau 1024 piksel, dan lebar 200, 320 atau 9000 piksel, dan Anda hanya ingin menyalin gambar berukuran besar berkualitas tinggi dari folder ini ke lokasi terpisah . Melakukan ini secara manual bisa menjadi tugas.

Dalam artikel ini, saya ingin menunjukkan kepada Anda perintah yang relatif sederhana yang dapat Anda jalankan di jendela terminal, yang memungkinkan Anda memfilter gambar berdasarkan ukuran, dan kemudian hanya menyalinnya dengan atribut yang Anda sukai. Sekarang, perlu diketahui bahwa ada lusinan cara berbeda yang dapat Anda lakukan untuk mencapai ini, dan solusi saya bukanlah cara yang unik atau komprehensif (untuk setiap kemungkinan penggunaan), tetapi seharusnya berhasil dengan baik. Mari kita mulai.

Alat perdagangan

Satu-satunya aplikasi yang Anda perlukan, selain berbagai alat baris perintah default Linux, adalah ImageMagick, yang merupakan bundel/rangkaian utilitas pemrosesan gambar. Itu diinstal di sebagian besar distribusi, jadi Anda tidak perlu melakukan apa pun di sebagian besar skenario.

Satu baris

Sekarang, perintah yang Anda butuhkan adalah ini:

ls *.FFF | xargs -Saya{} mengidentifikasi -format '%i %w %h\n' {} | grep -w XXX | awk '{cetak $1}' | grep -v ^$ | xargs -I cp {} "folder tujuan"

Apa yang kita miliki di sini?

Berikut rincian tindakan yang berbeda:

  • Pertama kita daftar semua file dengan ekstensi FFF (*.FFF) di folder saat ini. Anda tentu saja dapat mengubah ini ke direktori mana saja yang Anda suka, atau menggunakan metode yang lebih canggih untuk menemukan/menemukan file, seperti perintah find.
  • Kemudian, kami menggunakan xargs dengan penggantian string dan menyalurkan nama-nama tersebut ke utilitas identifikasi dari rangkaian ImageMagick, yang memproses setiap nama file dan mencetak atribut dalam format '%i %w %h\n', yang berarti:nama file, lebar, tinggi, karakter baris baru jadi kami memisahkan output untuk setiap entri. Di sini, Anda memiliki kebebasan berekspresi - Anda hanya dapat mencari lebar atau tinggi atau properti lainnya!
  • Kemudian, kami menerima entri wholeword (-w) yang cocok dengan ukuran tertentu, mis.:lebar (640). Anda dapat egrep untuk menangkap beberapa nilai, jika Anda suka, atau bahkan menggunakan ekspresi reguler.
  • Selanjutnya, kita hanya mencetak nama file dari file yang cocok dengan grep qualifier di atas. Kami benar-benar mencetak nilai pertama dengan awk, karena output dari perintah sebenarnya adalah karakter baris baru lebar nama file, seperti pada:

file1.jpg 640 480
file2.jpg 320 200

  • Selanjutnya, kami memfilter setiap baris kosong - dalam pengujian saya, terkadang, mengidentifikasi akan mencetak baris kosong, jadi kami tidak menginginkannya di hasil kami.
  • Kami kemudian meneruskan nama file ke xargs sekali lagi, dan menyalinnya ke folder tujuan, yang harus ada. Kami menggunakan opsi -I (Anda juga dapat menggunakan opsi -i yang tidak digunakan lagi) untuk memastikan bahwa nama file diuraikan dengan benar. Jika tidak, Anda mungkin mengalami kesalahan berikut:

cp:target './file.jpg' bukan direktori

Dua baris

Di atas seharusnya berfungsi dengan baik, tetapi jika Anda mengalami masalah karena perbedaan halus dalam cara alat mengurai nama file, baris kosong, dan karakter baris baru, Anda dapat menyederhanakan satu baris menjadi dua baris, tempat Anda pertama kali menulis hasilnya ke file teks, lalu parsing file teks untuk disalin:

ls *.FFF | xargs -Saya{} mengidentifikasi -format '%i %w %h\n' {} | grep -w XXX | awk '{cetak $1}' | daftar tee.txt

daftar kucing.txt | grep -v ^$ | xargs -I cp {} "folder tujuan"

Misalnya, kami menyalin semua gambar PNG dengan salah satu dimensi yang disetel ke 800 px:

ls *.png | xargs -Saya{} mengidentifikasi -format '%i %w %h\n' {} | grep -w 800 | awk '{cetak $1}' | daftar tee.txt

daftar kucing.txt | grep -v ^$ | xargs -I cp {} ./dir-only-big-files

Kesimpulan

Di sana. Sekarang, saya yakin Anda dapat mengusulkan selusin metode dan penyesuaian berbeda yang akan menghasilkan hal yang sama, bahkan mungkin lebih elegan daripada yang saya tulis. Jika demikian, silakan email saya dengan saran Anda, dan saya mungkin menambahkannya ke tutorial ini. Tujuan artikel ini bukan untuk menjadi cawan suci skripologi, tetapi solusi sederhana untuk kebutuhan bersama. Dan itu berhasil dengan baik.

Bagaimanapun, jika Anda memiliki banyak gambar, foto, tangkapan layar, apa pun, dengan berbagai ukuran dan atribut, Anda dapat menggunakan baris perintah Linux untuk memfilternya dengan cara yang cerdas, ditambah perintah identifikasi ImageMagick. Kami bahkan membicarakan hal-hal seperti ukuran, pemetaan warna, dan lainnya. kebisingan. Mudah-mudahan, Anda akan menemukan ini agak berguna. Hati-hati.


Linux
  1. Cara Mengecualikan File Ukuran Tertentu Dari Menyalin Di Linux

  2. Bagaimana mengelola pendaftar penampung Linux

  3. Bagaimana cara membuat file dengan ukuran tertentu di Linux?

  1. Cara Membuat File Dengan Ukuran Tertentu Di Linux

  2. Cara Menginstal ImageMagick di Amazon Linux

  3. Bagaimana Cara Membungkus Teks Pada Ukuran Kolom Tertentu?

  1. Dengan Perintah "kucing" Linux, Bagaimana Hanya Menampilkan Baris Tertentu Dengan Angka?

  2. Cara Meningkatkan Ukuran Swap di Ubuntu Linux

  3. Cara mendapatkan ukuran direktori di Linux