Bu başlık ilkerficicilar hocam için gelsin.

DOS'ta batch dosyalarıyla haşır neşir olmayı sevdiğimi herkes bilir. Ama tam zamanlı çalışan bir Ubuntu Server sahibi olarak bash ile de haşır neşir olmayı aynı ölçüde seviyorum.

Bu akşam
http://www.whdownload.com sitesindeki tüm dosyaları nasıl indiririm diye düşünürken linux üzerinde bash ile yapayım bu sefer bari dedim. Buradan da kullandığım komutları referans olsun diye veriyorum.

Öncelikle Google Chrome ile açtığım
http://www.whdownload.com sitesinde ALL linkine tıklayıp açılan sayfada boş bir yere sağ tıklayıp Sayfa kaynağını görüntüle (Ctrl+U) yapıp açılan sekmede yine boş bir yere sağ tıklayıp Farklı kaydet... (Ctrl+S) ile bir isim vererek (ben wh.html seçtim) Web sayfası, Sadece HTML biçiminde kaydettim. Bu kaydetme işlemi başka bir browserdan da benzer komutlarla yapılabilir.
Bu wh.html dosyasını Linux PC'ye aktardım ve PuTTY yardımıyla Linux PC'nin komut satırına bağlandım. Tüm komutlar wh.html dosyasıyla aynı klasörde çalıştırılmalı.
Önce grep ile linklerin sayısı tutuyor mu ona bakalım. Kaydettiğimiz sayfanın en altında 3384 dosya olduğu yazıyor.
cat wh.html | grep -c "games/"3384 sonucunu gördük, doğru yoldayız.
cat wh.html | grep "games/"komutu ile sadece dosya linklerinin olduğu satırları ekranda görmemiz lazım. Ancak liste "Binary file (standard input) matches" hatası ile yarıda kesiliyor. Onun da çözümü -a parametresi ile grep'e sadece text formatında çalışmasını söylemekmiş.
cat wh.html | grep -a "games/"Evet şimdi oldu ancak listenin başında ve sonunda fazlalıklar var. Önce baştaki dört boşluk karakteri ve <td><a href=" dizisinden kurtulalım ve yerine
http://www.whdownload.com/ adresini getirelim.
cat wh.html | grep -a "games/" | sed 's/ <td><a href="/http:\/\/www.whdownload.com\//g'Oldu da bitti maşallah. Başa eklediğimiz
http://www.whdownload.com/ adresindeki / karakterlerini \ ile nasıl escape'lediğimize dikkat.

Şimdi de sondaki fazlalıklardan kurtulalım. Bu sefer egrep komutu yardımıyla satırların sadece " karakterinde kadar olan kısmını alıyoruz.
cat wh.html | grep -a "games/" | sed 's/ <td><a href="/http:\/\/www.whdownload.com\//g' | egrep -o '^[^"]+'Liste istediğimiz hale geldiğine göre şimdi de bunu bir metin dosyasına kaydedelim.
cat wh.html | grep -a "games/" | sed 's/ <td><a href="/http:\/\/www.whdownload.com\//g' | egrep -o '^[^"]+' > whlinks.txtArtık tüm dosyaların linkleri elimizde olduğuna göre destekleyen bir programa bu dosyayı gösterip hepsini indirebiliriz. Ama durun madem her şeyi Linux'tan hallettik dosyaları da o indirsin bari. Bu sefer de imdadımıza wget komutu bir sürü karışık parametresiyle yetişiyor.
wget -r -H -nc -np -nH --cut-dirs=1 -e robots=off -l1 -i ./whlinks.txtArtık arkamıza yaslanıp bir Türk olarak 3384 adet dosyanın inmesini izlemekten başka yapacak bir işimiz kalmadı. Yaşasın Linux, Yaşasın GNU, Yaşasın bash.

Not: Tabi ki oturup izleyecek halimiz yok, Linux'a da PuTTY ile bağlandık peki download bitene kadar Windows PC de mi açık kalacak. Tabi ki hayır, bu sefer de imdadımıza screen komutu yetişiyor. Bu komut ile sanal bir teminal açıp indirme komutumuzu onuniçinden çalıştırarak PuTTY oturumunu kapatabiliriz. Daha sonra indirme durumunu kontrol etmek istersek bu sanal terminale tekrar bağlanabiliriz tabi ki.
Sanal terminal açmak için:
screen -A -m -d -S terminal-ismi /bin/bashBağlantıyı kesmek için Ctrl+A hemen peşinden D tuşlarına başıyoruz.
Tekrar bağlanmak için:
screen -r terminal-ismiBirden fazla sanal terminali farklı isimler vermek koşuluyla açabilirsiniz.

Bu akşamlık bu kadar bash komutu ve Linux yeter sanırım. Hepinize bol Linux'lu günler.
