我需要創建一個bash腳本,它將發送一個包含在特定目錄中的文件的電子郵件。該腳本將獲得目錄位置。 (即,./script.sh /backups/daily
)。
一旦腳本執行後,它將發送一封電子郵件,其中包含/backups/daily
中包含的列表文件。該電子郵件還將包含每個文件的大小以及創建文件的日期。
我很新的Linux。有人能指出我正確的方向嗎?Bash腳本列出目錄中的文件
1
A
回答
6
原油,但是這應該這樣做:
#!/bin/bash
ls -lh "[email protected]" | mailx [email protected] -s "listing of [email protected]"
我用mailx
這裏,但正確的郵件命令將取決於您的系統,它可能需要更多的標誌,例如用於身份驗證。它可能是mail
或sendmail
,或其他。
在ls -lh
,-l
是長期上市,其中包括大小和日期。 -h
用於文件大小的「人類可讀」格式,例如,而不是81883042(字節),您將看到78M
大小。
2
如果您需要的是目錄內容的列表,包含大小和修改時間,那麼ls -lh /backups/daily
可能就是您需要的。
如果您需要將其自動運行,請使用crontab -e
使用cron設置作業。運行man crontab
獲取更多信息。你編輯crontab可以包含類似以下內容:
#<Minute> <Hour> <Day_of_Month> <Month> <Day_of_Week> <Command>
05 01 * * * ls -lh /backups/daily
因爲默認情況下,郵件的cron作業的輸出給用戶,這會向您發送電子郵件,時間是1:05 AM開始每晚上上市。
您可以將此列表的輸出傳送到郵件命令以發送給其他人。編輯並在命令行中嘗試,然後在工作時將其添加到您的crontab中。
ls -lh /backups/daily | mail -s "backups contents for `date -I`" [email protected]
如果需要,可以定製ls的輸出。對於LS輸出一個簡單的(且過於簡單化的)過濾器是砍掉每行的左側:
$ ls -lh | cut -c32-
98M Jan 14 14:01 meb.20140105-030003.img
98M Jan 14 14:01 meb.20140106-030003.img
$
這是過於簡單,因爲左手部分的寬度(在我的情況32)將根據用戶和組名進行更改。如果這些對你來說是恆定的,那就調整一下數字,過於簡單就足夠好了。
相關問題
- 1. 用於列出文本文件中子目錄和文件的Bash腳本
- 2. 目錄(備份)文件的Bash腳本
- 3. bash腳本列出文件定期
- 4. Bash腳本:重命名輸出目錄
- 5. 輸入一個子目錄並在bash腳本中列出它的子目錄
- 6. Bash腳本,用於在BASH外殼中以特定格式列出目錄中的文件
- 7. Bash腳本橫切目錄
- 8. bash腳本列出目錄的內容,用逗號
- 9. bash腳本查找目錄,列出其內容和子文件夾信息
- 10. 用於從目錄中的文件列表中搜索的bash腳本
- 11. Bash腳本對目錄中的所有文件執行命令
- 12. Bash腳本僅對目錄中的新文件執行
- 13. bash腳本來tar目錄中的特定文件
- 14. bash腳本中的主目錄導航
- 15. 循環目錄和文件bash腳本 - awk不寫入文件
- 16. 計算指定目錄中的所有文件/目錄 - bash/shell腳本
- 17. 如何避免「/ *」替代bash腳本根目錄中的文件/目錄?
- 18. 僅列出bash中的目錄和子目錄中的文件名
- 19. 在BASH Shell腳本中創建文件和目錄
- 20. 使用bash腳本在目錄中迭代文件
- 21. bash腳本批量截取文件名在一個目錄中
- 22. bash腳本複製* .log文件到新目錄中
- 23. 樣本bash腳本或命令檢索號文件目錄
- 24. Node.js,Bash腳本和目錄本地節點二進制文件
- 25. Unix shell腳本找出腳本文件所在的目錄?
- 26. 如何列出目錄shell腳本上的文件
- 27. 在Bash腳本中更改目錄
- 28. 在bash腳本中更改目錄
- 29. PowerShell腳本列出目錄中的所有文件和文件夾
- 30. 觀看新文件目錄的bash腳本
這太好了。但是,您認爲我可以如何裁剪輸出以僅顯示創建的文件名,大小和日期。 這就是我現在得到的: '總計1.5T' '-rw-r - r-- 1 mysql mysql 769G 1月5日13:55 meb.20140105-030003.img' '-rw-r --r-- 1 mysql mysql 755G Jan 12 13:49 meb.20140112-030003.img' 但是我想: 'meb.20140105-030003.img 769G Jan 5 13:55' 'meb.20140112- 030003.img 755G Jan 12 13:49' – andresg3
單憑ls選項,就我所知,不可能獲得大小和日期。所以你需要過濾ls輸出,或者從頭開始編寫腳本。一個簡單的過濾器將通過剪切(1)來管理ls(1)的輸出,以便切割每一行的左側 - 我在上面的答案中添加了一個例子。其他過濾器可以用awk,sed,perl等來完成。 –