2014-01-13 51 views
1

我需要創建一個bash腳本,它將發送一個包含在特定目錄中的文件的電子郵件。該腳本將獲得目錄位置。 (即,./script.sh /backups/daily)。
一旦腳本執行後,它將發送一封電子郵件,其中包含/backups/daily中包含的列表文件。該電子郵件還將包含每個文件的大小以及創建文件的日期。
我很新的Linux。有人能指出我正確的方向嗎?Bash腳本列出目錄中的文件

回答

6

原油,但是這應該這樣做:

#!/bin/bash 
ls -lh "[email protected]" | mailx [email protected] -s "listing of [email protected]" 

我用mailx這裏,但正確的郵件命令將取決於您的系統,它可能需要更多的標誌,例如用於身份驗證。它可能是mailsendmail,或其他。

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)將根據用戶和組名進行更改。如果這些對你來說是恆定的,那就調整一下數字,過於簡單就足夠好了。

+0

這太好了。但是,您認爲我可以如何裁剪輸出以僅顯示創建的文件名,大小和日期。 這就是我現在得到的: '總計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

+0

單憑ls選項,就我所知,不可能獲得大小和日期。所以你需要過濾ls輸出,或者從頭開始編寫腳本。一個簡單的過濾器將通過剪切(1)來管理ls(1)的輸出,以便切割每一行的左側 - 我在上面的答案中添加了一個例子。其他過濾器可以用awk,sed,perl等來完成。 –

相關問題