我將備份文件保存在一個文件中,使用以下格式備份#01.tar.gz,備份#02.tar.gz等。 但現在我需要循環備份目錄找到最大的數字並命名下一個文件增量到它:備份#03.tar.gz 任何幫助嗎?shell腳本備份系統
-7
A
回答
3
這是一種不需要子shell或外部程序的解決方案,母鹿s不解析ls
輸出(這是不推薦的),並且應該使用包含空格的文件名(甚至是換行符)。您可以自定義您的前綴和擴展名。
#!/bin/bash
dir="/path/to/files"
prefix="backup#"
ext=".tar.gz"
max=1
for file in "$dir/$prefix"*
do
[[ $file =~ /$prefix([0-9]+)$ext$ ]] || continue
n="${BASH_REMATCH[1]}"
[[ $max -gt $n ]] || max=$((n+1))
done
printf -v newfilename "$prefix%04d$ext" "$max"
0
有幾種方法可以做到這一點,當然,我將簡單地假設您的腳本將以某種方式從這些備份所在的目錄運行,否則只需進行調整。
#!/bin/bash
for filename in `ls backup*tar.gz -r -1`; do
echo "Last backup file found is $filename"
last=`expr ${filename[@]:7:2}`
next=`expr $last + 1`
newname=`printf "backup#%02d.tar.gz" $next`
echo "Next backup file should be $newname"
break # important!!!
done
我寫這樣的,這是自我解釋,所以我肯定有更有效或緊湊的方式做同樣的,但這應該幫助你適應/在你窮的東西方案插入。
所以,總結一下操作:按相反的順序
- 列表中的文件夾匹配的「備份* tar.gz的」
- 所有文件分配名的一個這樣的文件名。第一個將是我們最新的現有備份。
- 使用EXPR和陣列操作的組合來提取的數目和轉換爲整數,其表示上次備份數
- 增加這樣的整數值由一個與EXPR
- 使用的printf格式化新的備份文件名,包括填充
- 重要打破循環,因爲我們已經知道這個循環中的第一個文件是最新的備份文件,所以我們可以退出。
當然,您可以更改文件名的獲取方式。
有關數組操作可以很方便地應用到在bash字符串參考,檢查http://tldp.org/LDP/abs/html/arrays.html
編輯:後@弗雷德的寶貴意見,同時使用ls
排序的文件對我來說,下面沒有按粘「T產卵多達子shell,它使用bash的自己的算法,並從printf
相當有用-v
選項:
#!/bin/bash
for filename in `ls backup*tar.gz -r -1`; do
echo "Last backup file found is $filename"
last="${filename[@]:7:2}"
printf -v newname "backup#%02d.tar.gz" $((last+1))
echo "Next backup file should be $newname"
break # important!!!
done
相關問題
- 1. 如何搭配linux shell備份腳本系統?
- 2. shell中的備份腳本
- 3. Shell腳本每隔6pm備份/ etc/passwd
- 4. shell備份腳本重命名
- 5. shell腳本在ubuntu上刪除備份
- 6. shell腳本備份源目錄備份目錄
- 7. 從系統Shell執行Ipython腳本
- 8. 準備shell腳本
- 9. Bash備份腳本
- 10. Mysql備份腳本
- 11. Unix備份腳本
- 12. SQL腳本備份
- 13. 只備份public_html的PHP備份腳本
- 14. 樣本備份腳本
- 15. Webmail系統腳本
- 16. Shell腳本查找本機的操作系統
- 17. 獲取操作系統版本的Shell腳本
- 18. 配置崇高的文本生成系統使用shell腳本
- 19. 用於數據庫備份的Linux shell腳本
- 20. Linux的shell腳本 - 備份/恢復的#1
- 21. 用於自動備份網站的Bash/Shell腳本
- 22. 用於遞歸sqlmetadata備份的shell腳本
- 23. Debian Shell Bash腳本 - 刪除舊備份/導演
- 24. 用於刪除早於2周的備份的Shell腳本
- 25. Python中的備份腳本
- 26. 簡單備份腳本
- 27. PHP備份腳本超時
- 28. 備份Derby DB Groovy腳本
- 29. PHP遞歸備份腳本
- 30. MongoDB的備份腳本
這肯定是可以做到你想要什麼,但如何使用包含在可排序格式的時間戳的文件(如YYYY-MM-DD_HHhMM)?這將回避問題並提供文件名中的其他信息。 – Fred