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

دوستی پرسیده چطور می تونه ده تا عکس با فرمت 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

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

درست کردن خودکار فهرست فایل های دایرکتوری

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

اگر نمی خواین ۱۲ دقیق ویدئو رو ببینین، خلاصه اش اینه که یک اسکریپت ساده به این شکل فایل اچ تی ام ال مورد نظر رو تولید می کنه :

#!/bin/sh

cd /home/jadi/public_html/audio/
echo "<html><body>" > index.html
echo "<ul>" >> index.html

for i in `ls *mp3 -tr`
do
    echo "<li>" >> index.html
    echo \<a href="$i"\>$i\</a\> >> index.html
    echo \</li\> >> index.html
done
echo "</ul>" >> index.html
echo "</body></html>" >> index.html

و کافیه این رو توی کرون بذاریم تا هر روز یکبار اجرا بشه:

07  12  *   *   *   /home/jadi/public_html/audio/makeindex.sh

و حالا می تونین مستقیم دایرکتوری http://jadi.net/audio رو ببینین؛ البته اگر شما هم می خواین دانلود کنین اجازه بدین یک کم زمان بگذره که همه با هم مشغول گرفتن اینهمه فایل نباشیم (:

اشتباه زدم، فاک!

سعید توی کامنتش در مطلب خداحافظ شل، سلام زیشل، یه برنامه جالب معرفی کرده: د فاک. این برنامه بامزه دقیقا همونی است که بعضی‌هامون وقتی یک تیکه از یک کامند رو اشتباه می‌زنیم می‌گیم: «د فاک/چرا اجرا نشد؟». اگر درست بعد از اون کامند بزنین fuck خودش می‌فهمه مشکل دستور قبلی است، سعی می کنه تصحیحش کنه و با یک انتر شما، اجراش کنه. مثلا:

برنامه با پایتون است و برای نصبش کافیه بزنین:

sudo -H pip install thefuck

و بعد از اولین fuck، خودش راهنمایی می کنه که چی رو باید کجا بنویسین. احتمالا یک کد کوتاه رو در bashrc. یا zshrc. و بعد اجرای دوباره bash یا zsh.

هواشناسی در ترمینال: مثل اینکه تا یکشنبه هم فضای بارونه

سایت wttr.in یک هواشناسی تحت ترمینال است. جذابیت خاص؟ با curl که یک ابزار بسیار قدرتمند لینوکسی برای دریافت یو آر ال‌ها با تکنیک‌ها و مکانیزمهای و گزینه‌های مختلف است هم می تونین بهش درخواست بدین. مثلا اگر لینوکس (یا کرل) دارین کافیه این دستور رو بزنین:

curl http://wttr.in/tehran

دستورات گنو/لینوکس بالاخره در شل ویندوز

اگر مطالب من رو دنبال کنین یا رادیوگیک می دونین که هر بار حرف از ویندوز شده من گفته‌ام که یکی از مهمترین قدم‌های پیشرفت ویندوز می تونه اضافه کردن دستورات فوق العاده خط فرمان گنو/لینوکس به ویندوز باشه. همین حرف دقیقا وقتی تکرار می شد که من مطالب چرا گنو/لینوکس رو دوست دارم رو می‌نوشتم و حواسمون بود که هفتاد هشتاد درصد کارهایی که می کنم در واقع مربوط به دستورات شل و گنو است.

امکان اضافه کردن این برنامه‌ها به ویندوز از طریق پروژه های جانبی مثل سیگ وین بوده ولی حالا خبر فوق العاده برای دنیای ویندوز اینه که مایکروسافت اعلام کرده در آینده نزدیک پوسته خط فرمان اصلی لینوکس یعنی بش و دستورات و حتی پشتیبانی از باینری های اوبونتو رو به ویندوز ۱۰ اضافه خواهد کرد. اگر این اتفاق بیافته عملا ویندوز بالاخره دارای حجم عظیمی از برنامه‌های مفید خط فرمان می شه که نبودشون شدیدا هر آدم حرفه ای که نیاز به ssh، rsync، grep، … داشته باشه رو آزار می‌داده.

لازمه یادآوری کنم که یکی از مزیت های عظیم سیستم های مک OSX به ویندوز، داشتن همین دستورات در خط فرمان بوده که باعث می شده افرادی با نیازمندی های فنی بتونن ازش استفاده کنن. حالا ویندوز هم می خواد از قافله عقب نمونه. این احتمالا جذابترین خبر در مورد ویندوز در سال ۹۵ خواهد بود.

هرچیزی که لازمه در مورد «۲۸ بار بک اسپیس» بدونین

این روزها همه دارن از باگ ۲۸ تا بک اسپیس‌ حرف می‌زنن. باگی بعضی‌ها می‌نویسن اجازه می‌ده به هر لینوکسی دسترسی پیدا کنین. هر چقدر هم نویسند‌ه‌ای از منطق و لینوکس دورتر باشه، خطرات بزرگتری رو براش قائل می‌شه. این باگ اولین توسط اسماییل ریپول و هکتور مارکو کشف شده و اینجا نگاهی دقیق داریم به اجزاش برای کسانی که دوست دارن بدونن واقعا ماجرا چی بوده و چه عواقبی داره.

آیا باگ واقعا وجود داشته؟

اما آیا این باگ وجود داره؟ جواب یک بله محکم و همراه پوزخند است. این باگ سوتی بدی بوده که از برنامه‌نویس‌های خوب در یکی از برنامه‌های بسیار پیچیده انتظار نمی‌رفته. این باگ روی گراب تاثیر می‌ذاره. ویندوزها از گراب استفاده نمی‌کنن و به جاش بوت لودرهای خودشون رو دارن که امکانات و توانایی‌های محدودتری داره و به شکل اختصاصی برای ویندوز توسعه پیدا کرده. گراب اونی است که در مرحله اول یک کامپیوتر رو بوت می‌کنه و بعد کنترل کامپیوتر رو به یک سیستم‌عامل (از جمله لینوکس یا ویندوز) تحویل می‌ده. اگر گراب نباشه سیستم‌عامل‌ها مجبور هستن خودشون یک ضرب کامپیوتر رو بوت کنن و دیگه امکان حضور چند سیستم عامل روی یک کامپیوتر یا بوت شدن کامپیوتر حتی بعد از خراب شدن سیستم عامل وجود نخواهد داشت.

باگ ۲۸ تا بک اسپیس چی بوده؟

این باگ وقتی کار می‌کرده که شما گراب داشته باشین و روی گراب پسورد گذاشته باشین. اتفاقی که خیلی کم می‌افته. گفته می‌شه در وضعیتی که قراره گراب از شما پسورد بپرسه، ۲۸ بار بک اسپیس رو بزنین سیستم کرش می‌کنه و شما به خط فرمانی می‌رین که دستورات بسیار محدودی داره که به منظور تعمیر سیستم گراب یا بوت کردن سیستم عامل‌هایی که روی کامپیوتر نصب شده تعبیه شده‌اند.

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

آیا هکرها به هر لینوکسی دسترسی پیدا کردن؟

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

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

  2. عدم درک دنیای لینوکس و ویندوز و امنیت. اصولا این باگ داره در لایه‌ قبل از بوت شدن لینوکس اتفاق می‌افته و از طریق دسترسی فیزیکی. یک اصل خیلی خیلی مهم در دنیای امنیت هست که هیچ وقت نباید فراموشش کنین! این اصل می‌گه لایه اول امنیت،‌ امنیت فیزیکی است. در دنیای امنیت می‌گن اگر حمله کننده به «فیزیک» دستگاه مورد حمله دسترسی داشته باشه، صحبت کردن از هر شکل دیگه امنیت بی‌معنی است. این باگ – که خیلی هم ضایع بوده – به شما اجازه می‌داده که به هارد کامپیوتری که بهش دسترسی فیزیکی دارن دسترسی پیدا کنین. این مساله در همه سیستم‌های دیگه هم صادقه. اگر شما دسترسی فیزیکی دارین اصولا نیازی به این باگ نیست، کافیه هارد رو در بیارین و توی یک کامپیوتر دیگه بذارین یا با یک یو اس بی دیسک لایو یا یک سی دی لایو کامپیوتر رو بوت کنین یا هر روش دیگه. در این سطح تنها بحث امن کننده اطلاعات شما می‌تونه رمزنگاری باشه ولی سخت افزار رو هیچ چیز نمی‌تونه از حملات فیزیکی حفاظت کنه.

اگر این بحث براتون عجیبه، می‌تونم دو تا ویدئو درست کنم که توش ببینین چطوری هر ویندوز و هر لینوکسی با داشتن دسترسی فیزیکی قابل ورود هستن.

جمع بندی

گراب سیستم بوت کننده کامپیوتر و تحویل دهنده سخت افزار به سیستم عامل بعدی (لینوکس یا ویندوز) است. تقریبا همه لینوکس ها از گراب استفاده می کنن و اگر کسی روی گرابش پسورد گذاشته باشه، این امکان بوده که با ۲۸ بار زدن بک اسپیس وارد خط فرمان اضطراری گراب شد. این مساله یک سوتی ضایع و خنده دار برنامه نویسی بوده و حالا رفع شده و ارزش نرم افزار آزاد به همین رفع باگ‌ها در لحظه کشف است. ما لینوکسی‌ها باید خنده‌ها رو بپذیریم و سعی کنیم برنامه‌هامون کمتر و کمتر چنین باگ‌هایی داشته باشن. همه هم باید یادشون باشه که دسترسی فیزیکی عملا به معنی امکان ورود کاربر به سیستم است و تنها راه جلوگیری از ورود کسی که به کامپیوترمون دسترسی فیزیکی داره هیچ راهی‌ است؛ هرچند که می‌شه با رمزگذاری اطلاعات، دسترسی این آدم خبیث به اطلاعات‌ رو مسدود کرد.

آیا خط فرمان همه گنو/لینوکس‌ها شبیه همدیگه است؟

این سوال هوتن است و احتمالا خیلی‌های دیگه؛ همچنین آدم‌ها می‌خوان بدونن که تفاوت‌ توزیعهای لینوکس‌های مختلف مثل اوپن سوزه، فدورا، اوبونتو، دبیان و … چیه.

من مشابه این بحث رو مفصل در جاهای مختلفی توضیح دادم. مثلا در اینجا که می‌گه توزیع لینوکس چیه و اینجا که می‌گه چطوری یک توزیع رو انتخاب کنین؛ البته دقت کنین که اون کتاب تموم نشده و هنوز برای انتشار عمومی آماده نیست ولی خب یک جایی بالاخره باید لینک داد دیگه.

commandline

ااما برای تکمیل بحث، باید بگم که توزیع عملا ترکیبی از این‌ها است:

  • نرم افزارهای پیش فرضی که آدم های پشت توزیع انتخاب می‌کنن
  • منابع و مخازن اون توزیع یعنی برنامه‌هایی که می‌تونین بدون دردسر و با یک کلیک یا دستور نصب کنین
  • گرافیک، لوگو و …
  • دستورات خاص اون توزیع که خیلی وقت‌ها مربوط به تنظیمات یا مدیریت بسته‌های نرم افزاری می‌شن؛ مثلا توی دبیان apt برای نصب برنامه‌ها استفاده می‌شه، در فدورا yum و در سیستم‌های مبتنی بر آرچ pacman. مثال خوب دیگه می‌تونه مجموعه نرم افزارهای کنترل و مدیریت yast در اوپن سوزه.

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

نتیجه؟ از هر لینوکسی که استفاده می‌کنین، نود درصد کارهاتون مشابه است و اوه ده درصد هم مربوط می‌شه به عملیات بسیار مرتبط با اون توزیع مثل نصب و حذف برنامه‌ها یا دسترسی به کارت‌های شبکه و تنظیمات پیش فرض و اینجور چیزها. پس با هر توزیعی که کار می‌کنین و پشت هر توزیعی که می‌شینین، می‌تونین هک خوشحالی داشته باشین!

چرا گنو/لینوکس رو دوست دارم:‌ فهرست کردن کل فایل‌های قابل دانلود یک سایت

یک دوستی پرسیده که چطوری می تونیم فهرست همه فایل‌های قابل دانلود در سروری مثل dl.folan.net رو داشته باشیم. این سرور اجازه می‌ده شما دایرکتوری‌هاش رو ببینین:

Screenshot from 2015-11-25 11-57-46

و مثلا توی دایرکتوری فیلم‌ها:

Screenshot from 2015-11-25 11-58-08

درست؟ دوست همیشگی ما در سری چرا گنو/لینوکس رو دوست دارم دستور جذاب wget است. پس شروع می کنیم!

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/

می تونه به شکل یک اسپایدر فایل‌های اچ تی ام ال رو می‌گیره و توشون رو نگاه می کنه و پاک می کنه و اینکار رو تا پنج شاخه داخل دایرکتوری‌ها هم پی‌ می‌گیره. البته اگر ارور بگیریم، دردسر درست می‌شه پس با اضافه کردن یک عبارت کوچیک، ارورها رو هم به خروجی اضافه می کنیم:

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 

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

Spider mode enabled. Check if remote file exists.
--2015-11-25 12:02:51--  htp://dl.folan.net/Movie/5/American.History.X.1998.720p.folan.Net.mkv
Reusing existing connection to dl.folan.net:80.
htp request sent, awaiting response... 200 OK
Length: 785963069 (750M) [application/octet-stream]
Remote file exists but does not contain any link -- not retrieving.

Removing dl.folan.net/Movie/5/American.History.X.1998.720p.folan.Net.mkv.
unlink: No such file or directory

Spider mode enabled. Check if remote file exists.
--2015-11-25 12:02:51--  htp://dl.folan.net/Movie/5/American.Justice.2015.1080p.folan.Net.mkv
Reusing existing connection to dl.folan.net:80.

من خط‌هایی رو می‌خوام که اولشون — داره و پس می ریم سراغ grep که می‌تونه توی یک متن خط‌هایی رو جدا کنه که چیز خاصی توشون هست:

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 | grep '^--'
--2015-11-25 12:04:57--  htp://dl.folan.net/Movie/4/A.Good.Day.to.Die.Hard.2013.720p.folan.Net.mkv
--2015-11-25 12:04:57--  htp://dl.folan.net/Movie/4/A.Good.Marriage.2014.BluRay.720p.folan.Net.Mkv
--2015-11-25 12:04:57--  htp://dl.folan.net/Movie/4/A.Hijacking.2012.720p.folan.Net.mkv

و خب حالا می تونیم فقط بخش یو آر ال رو جدا کنیم. با استفاده از awk:

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 | grep '^--' | awk '{ print $3 }' 
htp://dl.folan.net/6piljd5xepub7trr13ke.gif
htp://dl.folan.net/85film3.gif
htp://dl.folan.net/Movie/1/Into.the.Woods.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Iyobinte.Pusthakam.2014.720p.DVDrip.%5Bfolan.Net%5D.mp4
htp://dl.folan.net/Movie/1/Kick.2014.720p.BluRay.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/La.Grande.Illusion.1937.720p.Farsi.Dubbed.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Late.Phases.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Le-Week-End.720p.%5Bfolan.net%5D.mkv
htp://dl.folan.net/Movie/1/Legendary.2010.LIMITED.720p.%5Bfolan.Net%5D.mkv

و بعد فقط خط‌هایی رو نگه داریم که آخرشون چیزهایی مثل / یا css یا html و .. نداره:

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 | grep '^--' | awk '{ print $3 }' | grep -v '\.\(css\|js\|png\|gif\|jpg\)$' | grep -v '\/$' 
htp://dl.folan.net/Movie/1/Into.the.Woods.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Iyobinte.Pusthakam.2014.720p.DVDrip.%5Bfolan.Net%5D.mp4
htp://dl.folan.net/Movie/1/Kick.2014.720p.BluRay.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/La.Grande.Illusion.1937.720p.Farsi.Dubbed.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Late.Phases.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Le-Week-End.720p.%5Bfolan.net%5D.mkv
htp://dl.folan.net/Movie/1/Legendary.2010.LIMITED.720p.%5Bfolan.Net%5D.mkv

ایول. حالا کافیه همه چیز رو بریزیم توی یک فایل و خروی‌ها رو یک چکی بکنیم که درست باشه:

$ sort -R all.urls | head
htp://dl.folan.net/Movie/5/Modern.Times.1936.720p.Farsi.Dubbed.folan.Net.mkv
htp://dl.folan.net/Serial/The%20Killing/S01/The.Killing.S01E08.480p.folan.Net.mkv.folan.Net.mkv.mkv
htp://dl.folan.net/Serial/Breaking%20Bad/S05/BreakingBad.S05E06.folan.Net.mkv
htp://dl.folan.net/Movie/2/Priest.of.Evil.2010.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/5/A.Midsummer.Nights.Dream.1999.720p.WEB-DL.folan.Net.mkv
htp://dl.folan.net/Serial/Castle/S05/Castle.S05E22.480p.folan.Net.mkv
htp://dl.folan.net/Serial/Twin%20Peaks/S02/Twin.Peaks.S02E22.480p.folan.Net.mkv
htp://dl.folan.net/Serial/Supernatural/S04/SN-S04_E11.folan.Net.mkv
htp://dl.folan.net/Movie/Problem%20Child%201990/Bacheye.DardesarSaz.1990.720pWEB-DL.HQ_folan.info.mkv
htp://dl.folan.net/Serial/Archer/S01/Archer.S01E08.folan.Net.mkv

$ wc -l all.urls 
11284 all.urls

اینجوری فهرستی از ۱۱هزار فایل قابل دانلود اون سایتی که تصمیم گرفتم به خاطر حفظ بیزنسش، آدرسش رو ندم رو داشته باشیم (: هدف این پست دانلود نیست،‌ یاد گرفتن شیوه کار با لینوکسه و همچنین دقت کنین که http ها رو کردم htp که وبلاگ سعی نکنه به عنوان فیلم لودشون کنه از یو آر ال گفته شده (: خوش باشین و خندون و توانمند.