Bash 我想观察一个目录的变化,如果新文件到达并发送一封带有文件名的邮件
我创建了一个bash脚本来检查目录中的新文件更改,并将邮件发送给收件人。 但是我得到了错误 我创建了一个bash脚本,但它抛出了以下错误 script6.sh:第10行:意外标记附近的语法错误Bash 我想观察一个目录的变化,如果新文件到达并发送一封带有文件名的邮件,bash,shell,Bash,Shell,我创建了一个bash脚本来检查目录中的新文件更改,并将邮件发送给收件人。 但是我得到了错误 我创建了一个bash脚本,但它抛出了以下错误 script6.sh:第10行:意外标记附近的语法错误done' script6.sh:第10行:done' 我只是想知道我错在哪里。 整个脚本是否错误或是否存在任何小错误。 我需要帮助 #!/bin/bash targetDir="/somedir" while true; do files=("$targetDir"/*) sleep 1m ## wai
done'
script6.sh:第10行:
done'
我只是想知道我错在哪里。
整个脚本是否错误或是否存在任何小错误。
我需要帮助
#!/bin/bash
targetDir="/somedir"
while true; do
files=("$targetDir"/*)
sleep 1m ## wait 1 minute
files1=("$targetDir"/*)
if [[ ${#files[@]} != ${#files1[@]} ]]; then
mailx -s "New files arrived:$files1" some@mail.com < "$files1"
fi
done
#/bin/bash
targetDir=“/somedir”
虽然真实;做
文件=(“$targetDir”/*)
睡1米##等1分钟
files1=(“$targetDir”/*)
如果[${文件[@]}!=${文件1[@]}]];然后
mailx-s“新文件到达:$files1”some@mail.com<“$files1”
fi
完成
我的任务如下。
1.观察传入文件的目录。
2.如果收到任何新文件,请检查现有文件
3.如果是新文件,请向收件人发送邮件
我希望以上所有内容都应该通过bash脚本实现。这是我们第一次可以扫描目录并归档扫描结果。之后 如果存在更新、删除或创建新文件或目录 我们可以使用此基准存档数据进行比较,然后确定当前目录的内容是否已更新 我们可以根据需要使用文件块大小或md5 这里有一种更简单的方法,您还可以将其更新为使用其他监视方法
if [ "$#" -ne 1 ]; then
echo "Usage: `basename $0` directoryName"
exit 1
fi
firstTime=0
lastFile=last.txt
recentFile=recent.txt
currentDir=$1
if [ ! -e "$lastFile" ]; then
firstTime=1
fi
shopt -s extglob
cd $currentDir && du -bs !($lastFile|$recentFile) > recent.txt 2> /dev/null
if [ "$firstTime" -ne 1 ]; then
changes=$(sed '1,/@@/d' <(diff -Naur recent.txt last.txt))
if [ -n "$changes" ]; then
echo "Change:"
echo "$changes" | tee $$.tmp
echo
filename=$(awk '/^+/||/^-/{print $2}' $$.tmp | sort -u)
count=0
for f in $filename; do
echo "changed filename: $f"
let "count+=1"
done
echo -e "\nA total of $count filenames were changed."
else
echo "The Directory has no changes.."
fi
else
echo "[First run] Archiving.."
fi
cp $recentFile $lastFile
rm -rf $$.tmp 2> /dev/null
if[“$#”-ne 1];然后
echo“用法:`basename$0`directoryName”
出口1
fi
第一次=0
lastFile=last.txt
recentFile=recent.txt
currentDir=$1
如果[!-e“$lastFile”];然后
第一次=1
fi
shopt-s extglob
cd$currentDir&&du-bs!($lastFile |$recentFile)>recent.txt 2>/dev/null
如果[“$firstTime”-ne 1];然后
更改=$(sed'1,/@@/d'/dev/null)
我们第一次可以扫描目录并存档扫描结果。之后
如果存在更新、删除或创建新文件或目录
我们可以使用此基准存档数据进行比较,然后确定当前目录的内容是否已更新
我们可以根据需要使用文件块大小或md5
这里有一种更简单的方法,您还可以将其更新为使用其他监视方法
if [ "$#" -ne 1 ]; then
echo "Usage: `basename $0` directoryName"
exit 1
fi
firstTime=0
lastFile=last.txt
recentFile=recent.txt
currentDir=$1
if [ ! -e "$lastFile" ]; then
firstTime=1
fi
shopt -s extglob
cd $currentDir && du -bs !($lastFile|$recentFile) > recent.txt 2> /dev/null
if [ "$firstTime" -ne 1 ]; then
changes=$(sed '1,/@@/d' <(diff -Naur recent.txt last.txt))
if [ -n "$changes" ]; then
echo "Change:"
echo "$changes" | tee $$.tmp
echo
filename=$(awk '/^+/||/^-/{print $2}' $$.tmp | sort -u)
count=0
for f in $filename; do
echo "changed filename: $f"
let "count+=1"
done
echo -e "\nA total of $count filenames were changed."
else
echo "The Directory has no changes.."
fi
else
echo "[First run] Archiving.."
fi
cp $recentFile $lastFile
rm -rf $$.tmp 2> /dev/null
如果[“$#”-ne 1];则
echo“用法:`basename$0`directoryName”
出口1
fi
第一次=0
lastFile=last.txt
recentFile=recent.txt
currentDir=$1
如果[!-e“$lastFile”];则
第一次=1
fi
shopt-s extglob
cd$currentDir&&du-bs!($lastFile |$recentFile)>recent.txt 2>/dev/null
如果[“$firstTime”-ne 1];则
更改=$(sed'1,/@@/d'/dev/null)
只是想让您了解您还可以做什么:
#!/bin/bash
targetDir="22"
inotifywait -q -r -m -e create "$targetDir" |
while read -r path event filename; do
mailx -s "New files arrived: $path$filename" some@mail.com < "$path$filename"
done
!/bin/bash
targetDir=“22”
inotifywait-q-r-m-e创建“$targetDir”|
读取时-r路径事件文件名;执行
mailx-s“新文件到达:$path$filename”some@mail.com<“$path$filename”
完成
不过,您需要在系统上安装inotifywait,请通过安装“inotify工具”进行安装。只是为了让您了解您还可以做什么:
#!/bin/bash
targetDir="22"
inotifywait -q -r -m -e create "$targetDir" |
while read -r path event filename; do
mailx -s "New files arrived: $path$filename" some@mail.com < "$path$filename"
done
!/bin/bash
targetDir=“22”
inotifywait-q-r-m-e创建“$targetDir”|
读取时-r路径事件文件名;执行
mailx-s“新文件到达:$path$filename”some@mail.com<“$path$filename”
完成
不过,您需要在系统上安装inotifywait,请通过安装“inotify工具”进行安装。您可以使用为文件监视程序特制的inotifywait
#!/bin/bash
targetDir="/somedir"
inotifywait -m $targetDir -e create -e moved_to |
while read path action file; do
mailx -s "Filers arrived:$files" some@mail.com < "$files"
# do something with the file
done
!/bin/bash
targetDir=“/somedir”
inotifywait-m$targetDir-e create-e移动到|
读取路径操作文件时;执行以下操作
mailx-s“文件服务器到达:$files”some@mail.com<“$files”
#对这个文件做些什么
完成
您可以使用inotifywait,它是专为文件监视程序设计的
#!/bin/bash
targetDir="/somedir"
inotifywait -m $targetDir -e create -e moved_to |
while read path action file; do
mailx -s "Filers arrived:$files" some@mail.com < "$files"
# do something with the file
done
!/bin/bash
targetDir=“/somedir”
inotifywait-m$targetDir-e create-e移动到|
读取路径操作文件时;执行以下操作
mailx-s“文件服务器到达:$files”some@mail.com<“$files”
#对这个文件做些什么
完成
如果使用linux,请查看inotify工具
包提供的实用程序。如果使用linux,请查看inotify工具
包提供的实用程序。