我需要创建一个bash脚本,该脚本将发送一封包含在特定目录中的文件的电子邮件。该脚本将获取目录位置。(即./script.sh /backups/daily)。
执行脚本后,它将发送一封电子邮件,其中包含/backups/daily中包含的列表文件。电子邮件还将包括每个文件的大小(以GB为单位)和创建文件的日期。
我对linux是个新手。有人能给我指个方向吗?
发布于 2014-01-14 05:38:07
粗糙,但这应该可以做到:
#!/bin/bash
ls -lh "$@" | mailx your@email.com -s "listing of $@"我在这里使用了mailx,但是正确的邮件命令取决于您的系统,它可能需要更多的标志,例如用于身份验证。它可以是mail或sendmail,或者其他什么。
在ls -lh中,-l表示包含大小和日期的长列表。-h用于文件大小的“人类可读”格式,例如,您将看到78M作为大小,而不是81883042 (字节)。
发布于 2014-01-14 05:50:49
如果您需要的是目录内容的列表,包括大小和修改时间,那么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通过电子邮件向您发送列表
您可以将此清单的输出通过管道传输到一个mail命令中,以便发送给其他人。在命令行上编辑并尝试,然后当它工作时,将它添加到您的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)将根据用户名和组名而变化。如果这些对你来说是恒定的,那么调整这个数字,过于简单的就足够了。
https://stackoverflow.com/questions/21101823
复制相似问题