تغییر فرمت کلی عکس با کامند لاین

دوستی پرسیده چطور می تونه ده تا عکس با فرمت jpg رو از طریق کامند لاین به png تبدیل کنه. بذارین با هم پیش بریم. اول یک دایرکتوری می سازم که بتونیم توش کار کنیم:

➜  /mkdir /tmp/jpg2png
➜  /cd /tmp/jpg2png 
➜  jpg2png

حالا باید ده تا عکس جی پگ اتفاقی از کامپیوتر پیدا کنم. یک دستور بامزه هست که هم فایل ها با پسوند جی پی گ رو نشون می ده؛ البته در یک دایرکتوری خاص که اینه:

find ~/Pictures -iname '*jpg'

کافیه کل خروجی ها رو به شکل رندم مرتب کنیم:

find ~/Pictures -iname '*jpg' | sort --random-sort

که البته چون روی مک هستیم که توش یکی تصمیم گرفته sort استاندارد گنو رو بیخیال بشه و یک سورت ناقص تحویلمون بده، باید از سورت گنو که با برو نصب شده استفاده کنم، یعنی:

find ~/Pictures -iname '*jpg' | gsort --random-sort

و اگر ده تا اولی رو پیدا کنیم، یعنی ده تا فایل اتفاقی از دایرکتوری عکس ها ریختم .. نه.. باید بریزیمش… پس می دیم به ایکس آرگز:

find ~/Pictures -iname '*jpg' | gsort --random-sort | head -10 | xargs -I files cp files .

و البته مک یک انگولک مسخره هم به xargs کرده ولی به هرحال کار می کنه. در واقع ظاهرا دیفالتش یک -L 1 داره! حالا ما ده تا فایل اتفاقی جی پگ داریم:

➜  jpg2png ls
33_ibm7291.jpg
IMG_0104.jpg
IMG_20140910_090542.jpg
IMG_20150101_144039.jpg
IMG_20150607_084842.jpg
IMG_20150617_210638.jpg
IMG_20150721_214643.jpg
JungfrauClimbers_EN-US11631578069_1366x768.jpg
MaracanaFireworks_EN-US9834580695_1366x768.jpg
dual_grass.jpg

حالا کافیه با استفاده از برنامه imagemagick که همیشه نصب داریمش (توی اوبونتو با apt install و در مک با brew install) بریم سراغ درست کردن یک دایرکتوری برای پی ان جی ها، و ساختن خروجی ها با یک حلقه فور که روی هر فایل یک دستور convert اجرا می‌کنه:

➜  mkdir pngs
➜  for file in *.jpg; do convert $file pngs/$file.png  ; done

و همه چیز مرتب شده:

➜  tree
zsh: command not found: tree
➜  brew install tree
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> New Formulae
exa             httpflow        jvm-mon         libetpan        terraform-docs
==> Updated Formulae
amazon-ecs-cli  g3log           lynis           paket           terraform
ats2-postiats   geoip           macvim          ponyc           todolist
aws-sdk-cpp     git-lfs         media-info      roswell         urh
awscli          github-release  mediaconch      rtv             uwsgi
clutter-gst     jenkins-lts     metabase        ruby@2.3        vim
convox          jfrog-cli-go    node ✔          scw             vnu
crystax-ndk     jmxtrans        opensc          sqlite ✔
fdroidserver    khal            osmfilter       swiftformat
fluent-bit      kobalt          osrm-backend    sysdig
==> Deleted Formulae
dwarf-fortress             fb-adb                     multirust

==> Downloading https://homebrew.bintray.com/bottles/tree-1.7.0.sierra.bottle.1.

curl: (7) Failed to connect to homebrew.bintray.com port 443: Operation timed out
Error: Failed to download resource "tree"
Download failed: https://homebrew.bintray.com/bottles/tree-1.7.0.sierra.bottle.1.tar.gz
Warning: Bottle installation failed: building from source.
==> Using the sandbox
==> Downloading http://mama.indstate.edu/users/ice/tree/src/tree-1.7.0.tgz
######################################################################## 100.0%
==> make prefix=/usr/local/Cellar/tree/1.7.0 MANDIR=/usr/local/Cellar/tree/1.7.0
?  /usr/local/Cellar/tree/1.7.0: 8 files, 114.3KB, built in 5 seconds
➜  tree
.
├── 33_ibm7291.jpg
├── IMG_0104.jpg
├── IMG_20140910_090542.jpg
├── IMG_20150101_144039.jpg
├── IMG_20150607_084842.jpg
├── IMG_20150617_210638.jpg
├── IMG_20150721_214643.jpg
├── JungfrauClimbers_EN-US11631578069_1366x768.jpg
├── MaracanaFireworks_EN-US9834580695_1366x768.jpg
├── dual_grass.jpg
└── pngs
    ├── 33_ibm7291.jpg.png
    ├── IMG_0104.jpg.png
    ├── IMG_20140910_090542.jpg.png
    ├── IMG_20150101_144039.jpg.png
    ├── IMG_20150607_084842.jpg.png
    ├── IMG_20150617_210638.jpg.png
    ├── IMG_20150721_214643.jpg.png
    ├── JungfrauClimbers_EN-US11631578069_1366x768.jpg.png
    ├── MaracanaFireworks_EN-US9834580695_1366x768.jpg.png
    └── dual_grass.jpg.png

1 directory, 20 files

می‌بینین که برای کار به مک برگشتم. بعدا دلایلش رو می نویسم ولی خلاصه اش اینه که شرکت استانداردش مک است و تجربه هم می شه. از اونطرف نکته جالبتر اینه که در واقع می بینین وقتی می گیم گنو/لینوکس چقدر تاکیدمون روی بخش گنو زیاده. در اصل این ابزارهای باحال مربوط به پروژه گنو است و در نتیجه سیستم هایی که پایه گنو/یونیکسی دارن هم ازش لذت می برن. مثلا همین مک. و از اونطرف راحت می بینین که چرا مک رو اعصاب می ره،‌ مثلا دستوری به خوبی سورت رو برداشته فلج کرده هرچند که با پروژه فوق العاده هوم‌برو، تقریبا همه چیزهای مهم لینوکس رو می شه اینطرف هم داشت، به جز یک رابطه کاربری کارا و خوش دست و یه ادیتور فارسی متن محض درست – بعدا در موردش بیشتر حرف می زنیم (: