linux - Bash 脚本自动通过电子邮件发送变量文件名和相应的修改日期时间戳
问题描述
简而言之,我正在尝试查找重复文件(已从 FTP 站点下载,它是另一个脚本文件),并通过电子邮件向企业发送有关所有重复文件及其相应修改日期的信息。
该文件/path/test_mail.txt
每行包含一个文件名(在本例中为两个文件名),例如。
abc.xlsx
def.xlsx
在下面的代码中,我试图为第一个文件名找到修改后的日期时间戳,并使用相应的文件名对其进行管道传输并发送一封电子邮件,类似地,循环为第二个文件运行。
这是使用统计
for val in '/path/test_mail.txt'; do
{ stat path/$val | grep 'Modify: ' | cut -d' ' -f2,3,4 | awk -F"." '{print $1}' ; } |
$val
done |
mail -s "Duplicate file found ${DATE}" abc@xyz.com
我还尝试使用 ls -ltr 以另一种方式
for val in '/path/tj_mail.txt'; do
{ ls -ltr /path/$val | cut -d' ' -f6,7,8 | find $val / -path
$val
done |
mail -s "Duplicate file found ${DATE}" abc@xyz.com
我期待电子邮件正文应该大约像
重复文件名 - xyz.xlsx 上传时间 - 2020-02-17 11:18:10
重复文件名 - abc.xlsx 上传时间 - 2020-02-17 11:18:10
下面的问题是可选的,但如果你能帮助我,那就太好了!
另外我正在使用另一个脚本来查找目录中的重复文件名。它工作得很好。但我想知道我是否可以将上面相同的代码放入 1 个单个脚本文件中,这样它就会变得简洁明了!
{
DATE=`date +"%Y-%m-%d"`
dirname=/path
tempfile=myTempfileName
find $dirname -type f > $tempfile
cat $tempfile | sed 's_.*/__' | sort | uniq -d|
while read fileName
do
grep "$fileName" $tempfile
done
} | tee '/path/tj_var.txt' | awk -F"/" '{print $NF}' | tee '/path/tj_var.txt' | sort -u | tee '/path/tj_mail.txt' | mail -s "Duplicate file found ${DATE}" abc@xyz.com
这是我的实际代码
path = /marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation printf "%s" "$(</marketsource/scripts/tj_mail.txt)" | while IFS= read -r filename; do mtime=$(stat -c %y "/path/$filename") printf 'Duplicate Filename - %s Uploaded time - %s\n' "$filename" "$mtime" done | mail -s "Duplicate file found ${DATE}" tipalli@allegisgroup.com mtime=$(stat -c %y "/path/$filename" 2>/dev/null || echo "unknown (stat failed)")
这是错误!
./tj_mail1.ksh: line 1: path: command not found stat: cannot stat `/path/AirTimeActs_2020-02-08.xlsx': 没有这样的文件或目录
再多一点!!
我的目标是查找任何重复文件,如果没有任何重复文件并且查找命令为空,则执行 if 条件并执行“mv”命令并完全退出脚本,如果它们是重复文件,则退出 if 条件并管道复制文件并执行邮件和日期戳操作。
{
DATE=`date +"%Y-%m-%d"`
dirname=/marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation
tempfile=myTempfileName
find $dirname -type f > $tempfile
cat $tempfile | sed 's_.*/__' | sort | uniq -d|
while read fileName
do
grep "$fileName" $tempfile
done
}
if ["$fileName" == ""]; then
mv /marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation/*.xlsx /marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation/Archive
mv /marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation/*.csv /marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation/Archive
exit 1
fi | tee '/marketsource/scripts/tj_var.txt' | awk -F"/" '{print $NF}' | tee '/marketsource/scripts/tj_var.txt' | sort -u | tee '/marketsource/scripts/tj_mail.txt'
DATE=`date +"%Y-%m-%d"`
printf "%s\n" "$(</marketsource/scripts/tj_mail.txt)" | while IFS= read -r filename; do
mtime=$(stat -c %y "/marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation/$filename")
printf 'Duplicate Filename - %s Uploaded time - %s\n\n' "$filename" "$mtime"
done | mail -s "Duplicate file found ${DATE}" ti@allegisgroup.com
解决方案
我假设该文件/path/test_mail.txt
已由其他一些脚本(作为重复文件列表)准备好,任务是添加列出的文件的修改时间/path/test_mail.txt
并格式化输出,如问题所示。
while IFS= read -r filename; do
mtime=$(stat -c %y "/path/$filename")
printf 'Duplicate Filename - %s Uploaded time - %s\n' "$filename" "$mtime"
done < "/path/test_mail.txt"
除了解析文件/path/test_mail.txt
,您还可以将其添加到这样的管道中
somehow_print_duplicate_file_names | while IFS= read -r filename; do
mtime=$(stat -c %y "/path/$filename")
printf 'Duplicate Filename - %s Uploaded time - %s\n' "$filename" "$mtime"
done | somehow_send_mail
stat
如果失败,您可以添加一些错误处理。
mtime=$(stat -c %y "/path/$filename" 2>/dev/null || echo "unknown (stat failed)")
或使用stat
的错误信息
mtime=$(stat -c %y "/path/$filename" 2>&1)
推荐阅读
- javascript - DateTimePicker 验证提交操作
- c# - 后面代码中的 ComboBox SelectedValuePath 问题
- git - GIT - 从上次拉取提交消息和差异
- python - PPTX 是否已更新为包含辅助轴?
- c# - Entity Framework 6 中一对多依赖的更新问题
- python - 如何在 JSON 文件中插入空间参考以在服务器上添加功能
- python - 如何在 QtPy 中设置日志记录级别(启用完整的调试信息)
- sharepoint-2013 - 托管元数据服务或连接当前不可用”
- isabelle - 在 Isabelle 证明中合并 2 个具有共同未知变量的子目标
- spring-boot - spring boot 安全数据库授权,无需密码编码