我需要创建一个bash脚本,它将发送一封包含在特定目录中的文件的电子邮件。该脚本将获取目录位置。 (即./script.sh /backups/daily
)
脚本执行后,将发送一封包含/backups/daily
中包含的列表文件的电子邮件。电子邮件还将包括每个文件的大小(以GB为单位)以及创建文件的日期
我是linux的新手。有人能指出我正确的方向吗?
答案 0 :(得分:6)
原油,但这应该这样做:
#!/bin/bash
ls -lh "$@" | mailx your@email.com -s "listing of $@"
我在这里使用mailx
,但是正确的邮件命令将取决于您的系统,并且可能需要更多标志,例如用于身份验证。它可以是mail
或sendmail
,也可能是其他内容。
在ls -lh
中,-l
用于长列表,其中包括尺寸和日期。 -h
用于“人类可读”的文件大小格式,因此例如代替81883042(字节),您会看到78M
作为大小。
答案 1 :(得分: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分向您发送一个列表。
您可以将此商家信息的输出通过管道传输到邮件命令中,以便发送给其他人。编辑并在命令行上尝试此操作,然后在它工作时,将其添加到您的crontab。
ls -lh /backups/daily | mail -s "backups contents for `date -I`" toaddress@example.com
如果需要,可以定制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)的宽度将根据用户和组名称而改变。如果这些对你来说是不变的,那么调整数字,过于简单就足够了。