gpt4 book ai didi

linux - Bash 脚本自动通过电子邮件发送变量文件名和相应的修改日期时间戳

转载 作者:行者123 更新时间:2023-12-02 09:38:43 24 4
gpt4 key购买 nike

简而言之,我正在尝试查找重复文件(已从 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

我期待电子邮件正文应该大约像

Duplicate Filename - xyz.xlsx Uploaded time - 2020-02-17 11:18:10

Duplicate Filename - abc.xlsx Uploaded time - 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': No such file or directory



再多一点!!

我的目标是查找任何重复文件,如果没有任何重复文件并且 find 命令为空,则执行 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)

关于linux - Bash 脚本自动通过电子邮件发送变量文件名和相应的修改日期时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60491730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com