Bash脚本列出目录中的文件

时间:2014-01-13 21:33:47

标签: mysql linux bash shell batch-file

我需要创建一个bash脚本,它将发送一封包含在特定目录中的文件的电子邮件。该脚本将获取目录位置。 (即./script.sh /backups/daily) 脚本执行后,将发送一封包含/backups/daily中包含的列表文件的电子邮件。电子邮件还将包括每个文件的大小(以GB为单位)以及创建文件的日期 我是linux的新手。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:6)

原油,但这应该这样做:

#!/bin/bash
ls -lh "$@" | mailx your@email.com -s "listing of $@"

我在这里使用mailx,但是正确的邮件命令将取决于您的系统,并且可能需要更多标志,例如用于身份验证。它可以是mailsendmail,也可能是其他内容。

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)的宽度将根据用户和组名称而改变。如果这些对你来说是不变的,那么调整数字,过于简单就足够了。