有什么理由创建 Bash shell 脚本,将所有新传入的文件信息(文件名;到达日期/时间;文件大小)发送到某个文件夹。
我不能使用 inotify,所以请不要将其视为选项。
就像是:
#!/bin/bash
monitor_dir=/path/to/dir
email=me@me.com
files=$(find "$monitor_dir" -maxdepth 1 | sort)
IFS=$'\n'
while true
do
sleep 5s
newfiles=$(find "$monitor_dir" -maxdepth 1 | sort)
added=$(comm -13 <(echo "$files") <(echo "$newfiles"))
[ "$added" != "" ] &&
find $added -maxdepth 1 -printf '%Tc\t%s\t%p\n' |
mail -s "incoming" "$email"
files="$newfiles"
done
Run Code Online (Sandbox Code Playgroud)
只要创建的文件中没有包含名称中的换行符,这应该可以正常工作。其他警告是我看不到任何find
输出人类可读大小的选项,因此需要进一步处理。此外,大多数文件系统实际上并不存储文件创建时间,而是使用修改时间(在这种情况下它并没有真正的区别)。
要测试脚本并将其打印到终端,只需删除前一行末尾的mail
行和管道 ( |
)。我把监控目录改成了最上面的一个变量,而不是直接编码,所以在这里填写目录。然后将脚本放入一个文件中,设置可执行权限并运行(./filename
当在脚本目录中时)。如果您将文件放入您的目录中,它们应该会在几秒钟后出现在脚本的控制台上。
要发送电子邮件,您需要确保您的系统设置为从命令行发送电子邮件。你的发行版应该有这方面的说明。您可以发送带有以下内容的测试电子邮件:
<<<hello mail -s "test email" some@email.com
Run Code Online (Sandbox Code Playgroud)
如果您不想设置发送电子邮件,也可以通过 向本地系统用户发送电子邮件username@localhost
。您可以使用mail
命令进行检查,也可以设置不同的邮件阅读器,例如 Thunderbird。