多級目錄批量下載網(wǎng)站圖片修訂版,及改名方法
3.10再次修改。經(jīng)過多次測試發(fā)現(xiàn)mv方式不是很好用,不再采用mv方式,而是進入目錄后再進行下載,此次測試達到了預(yù)期效果
修改后的版本為
#!/bin/bash
#下載
#author:falconhero
#qq:40594324
PATH=$PATH:$HOME/bin:/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/usr/bin:/root/bin
export PATH
mkdir -p /root/201010/{1..100}
for j in {1.100}
do
for i in {1..50}
do
cd /root/201010/$j
wget https://cache.yisu.com/upload/information/20200311/30/169178.jpg &
done
done
由于沒注意導(dǎo)致重復(fù)下載了一次。后綴名變成了.jpg.1,原來的下載圖片有的只下了一半,所以刪除第一次下載的,保留第2次的
find . -name \*.jpg |xargs rm -f
重命名方法:
#!/bin/bash
for i in {10..78}
do
cd /root/201011/$i
rename ".jpg.1" ".jpg" *
done
可以再虛擬機里面下載,下載完畢后,用ftp的模式導(dǎo)出。
常用crt軟件xshell自帶ftp,用起來不錯,比secureCRT好用。不用再打包下載了。
虛擬機內(nèi)存視下載量調(diào)整,512M死掉概率很高,測試時候使用1G內(nèi)存,下載進程1600+,再用top模式查看時發(fā)現(xiàn)內(nèi)存使用瞬間降到0.然后逐漸恢復(fù)正常。如果在windows同時開啟1000+下載進程估計會直接導(dǎo)致系統(tǒng)死機,windows下未嘗試
大概1G內(nèi)存支持到1600左右的下載進程,沒有太細究。
IP地址為隨意寫的。請自行修改為你要下載的地址。
-----------------------------------------------
#暫告一段落:由于雙變量混合數(shù)字會導(dǎo)致$m0$l 變?yōu)橐粋€數(shù)字,所以轉(zhuǎn)義0,寫為20$m\0$l,測試成功,因測試20$m\0$l目錄全為空,刪除
實地測試:循環(huán)變量不能多嵌套,有幾個變量就用幾個變量,否則會額外循環(huán)N次
執(zhí)行方法chmod 755 wgetdown.sh ;nohup ./wgetdown.sh & ,后臺自動執(zhí)行
#!/bin/bash
#下載
#author:falconhero
#qq:40594324
PATH=$PATH:$HOME/bin:/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/usr/bin:/root/bin
export PATH
mkdir -p 20{10..12}{10..12}/{1..100}
mkdir -p 20{10..12}0{1..9}/{1..100}
for m in {10..12}
do
for j in {1..65}
do
for i in {1..50}
do
wget https://cache.yisu.com/upload/information/20200311/30/169180.jpg
mv *.jpg 20$m$m/$j/
done
done
done
#刪除空目錄下的空目錄
for n in `find /root/falcon -type d -empty`;
do rmdir $n;
done
#刪除空目錄
for n in `find /root/falcon -type d -empty`;
do rmdir $n;
done
------------------額外測試--------------------
一些測試
wget http://wvw.
Domain Name.com/2010$k/$j/$i.jpg &
#后臺全部執(zhí)行,但是命名會混亂,舍棄(再次測試,發(fā)現(xiàn)不會導(dǎo)致命名混亂)
修訂:不會造成命名混亂,但是會導(dǎo)致消耗光大量內(nèi)存。。畢竟相當(dāng)于無限進程下載。。也就是linux穩(wěn)定性不錯,windows要是開啟1000進程下載,早崩潰了。。。
關(guān)閉當(dāng)前窗口后,下載終止解決方法
chmod 755 wgetlist
nohup ./wgetlist &
完美解決。后臺慢慢下載去了
原因探索:
上方到后臺執(zhí)行的進程,其父進程還是當(dāng)前終端shell的進程,而一旦父進程退出,則會發(fā)送hangup信號給所有子進程,子進程收到hangup以后也會退出
測試時額外多寫了一層循環(huán)變量,但調(diào)用時候并未使用變量,導(dǎo)致多循環(huán)了數(shù)次
刪除額外變量后,達到預(yù)期循環(huán)目的
結(jié)論:循環(huán)語句不能多寫無用變量,會嚴重影響效率,重復(fù)執(zhí)行N遍代碼
--------------------搜集資料------------------
后面為轉(zhuǎn)載,注釋
http://hankjin.blog.163.com/blog/static/337319372010111492348473/
1. 使用&符號在后臺執(zhí)行命令
你可以在Linux命令或者腳本后面增加&符號,從而使命令或腳本在后臺執(zhí)行,例如:.
$ ./my-shell-script.sh &
詳情請參考這篇文章 Bg, Fg, &, Ctrl-Z – 5 Examples to Manage Unix Background Jobs
2. 使用nohup在后臺執(zhí)行命令
使用&符號在后臺執(zhí)行命令或腳本后,如果你退出登錄,這個命令就會被自動終止掉。要避免這種情況,你可以使用nohup命令,如下所示:
$ nohup ./my-shell-script.sh &
詳情請參考這篇文章 Unix Nohup: Run a Command or Shell-Script Even after You Logout
3. 使用screen執(zhí)行命令
通過nohup和&符號在后臺執(zhí)行命令后,即使你退出登錄,這個命令也會一直執(zhí)行。但是,你無法重新連接到這個會話,要想重新連接到這個會話,你可以使用screen命令。.
Linux的screen命令提供了分離和重新連接一個會話的功能。當(dāng)你重新連接這個會話的時候,你的終端和你分離的時候一模一樣。
詳情請參考這篇文章 Screen Command Examples: Get Control of Linux / Unix Terminal
4. 使用at將一個命令作為批處理執(zhí)行
使用at命令,你可以讓一個命令在指定的日期和時間運行,例如要在明天上午10點在后臺執(zhí)行備份腳本,執(zhí)行下面的命令:
$ at -f backup.sh 10 am tomorrow
詳情請參考這篇文章 Understand at, atq, atrm, batch Commands using 9 Examples
在批處理模式下執(zhí)行某些任務(wù)需要啟用一些選項。下面的文章會給出詳細解釋:.
- How To Capture Unix Top Command Output to a File in Readable Format
- Unix bc Command Line Calculator in Batch Mode
- How To Execute SSH and SCP in Batch Mode (Only when Passwordless login is enabled)
5. 使用watch連續(xù)地執(zhí)行一個命令
要想按一個固定的間隔不停地執(zhí)行一個命令,可以使用watch命令,如下所示:
$ watch df -h
詳情請參考這篇文章 Watch: Repeat Unix Commands or Shell-Scripts every N seconds
============================================
4.26后續(xù)
現(xiàn)在跟oldboy老師上完編程課了,哪天繼續(xù)修改下腳本去。重新測試完善下經(jīng)驗