当前目录包含不断出现的新日志 / tmp / logstash / dir包含我将比较新的日志
条件:
如果新日志具有与/ tmp / logstash中已存在的相同的名称和大小,我应该得到相同的文件已存在'味精。
否则,脚本会将新日志移动到/ tmp / logstash /.
注意,如果名称相同但大小不同,脚本仍应将新文件移至tmp / logstash /
我的脚本如下,并且它与组合'然后&&&&如果',你能帮忙解决一下吗?
for file in *.log; do
new_filesize=$(du -b "$file" | cut -f 1)
if [[ -e /tmp/logstash/"$file" ]]
then
old_filesize=$(du -b /tmp/logstash/"$file" | cut -f 1) &&
if [[ "$new_filesize"="$old_filesize" ]]; then
echo "The file already exists"
fi
else mv $file /tmp/logstash
fi
done
答案 0 :(得分:2)
条件表达式中=
周围需要空格:
if [[ $new_filesize = $old_filesize ]]; then
没有空格,您只是测试连接字符串"$new_filesize"="$old_filesize"
是否为非空。
答案 1 :(得分:1)
根据您的评论意见。以下测试是否存在old_file
。如果是,则检查new_file
和old_file
之间的大小是否不同。如果它们不同,则会将new_file
移至/tmp/logstash/
,替换old_file
。如果old_file
存在并且文件大小相等,那么它将echo "The file already exists"
。如果old_file
不存在,则只需将new_file
复制到/tmp/logstash/
。
for file in *.log; do
if [ -e /tmp/logstash/"$file" ]; then
if [ $(stat %s "$file") -ne $(stat %s /tmp/logstash/"$file") ]
mv -f "$file" /tmp/logstash
else
echo "The file already exists"
fi
else
cp "$file" /tmp/logstash/"$file"
fi
done
注意:请记住引用您的变量。
new_filesize
和old_filesize
for file in *.log; do
new_filesize=$(stat %s "$file")
if [ -e /tmp/logstash/"$file" ]; then
old_filesize=$(stat %s /tmp/logstash/"$file")
if [ $new_filesize -ne $old_filesize ]
mv -f "$file" /tmp/logstash
else
echo "The file already exists"
fi
else
cp "$file" /tmp/logstash/"$file"
fi
done
注意: mv -f
已添加到old_file
存在的所有情况,以防止因现有文件导致移动失败。