比较两个文件的大小并给出警告信息的脚本

比较两个文件的大小并给出警告信息的脚本

我对脚本完全是个新手,但我需要一个脚本来比较两个文件的大小,如果其中一个文件比另一个文件大 10%,就会发出警告。

到目前为止,我想到了这一点:

#!/bin/bash
test1=/trans/home/user/test1
test2=/trans/home/user/test2
test1=$(stat -c%s "$test1")
test2=$(stat -c%s "$test2")

if (( test2 > 110 * test1 ))
then
  echo "WARNING: test2 has increased 10% or more in size"
fi

我用 touch 创建了两个文件,并用 truncate 调整了它们的大小。无论我给它们指定多大尺寸,这都不会给出警告信息,除非我将大于号切换为 < 号,然后它会给出警告信息。然而这对我来说不起作用。

对于如何编辑此程序以使其正常工作的任何想法都将受到赞赏。

问候。

答案1

你的数学不正确。下面是一个使用bc精度计算器的脚本,它可以进行浮点运算而不必担心溢出bash

#!/bin/bash

test1=/trans/home/user/test1
test2=/trans/home/user/test2
test1sz=$(stat -c%s "$test1")
test2sz=$(stat -c%s "$test2")

[ $(echo "scale=2; ${test2sz} > ${test1sz}*1.1" | bc) -eq 1 ] && {
  echo "WARNING: ${test2} has increased 10% or more in size"
}

答案2

你需要

if (( test2 > 110 * test1 / 100))

大小加 10% 是 1.10 或 110/100,而不是 110。请注意,您应该先乘再除,否则 110/100 四舍五入为整数就是 1.00。另一方面,110*test1 可能超出整数范围,尽管对于文件大小和 64 位整数来说,这种情况不太可能发生。

答案3

设法这样做:

#!/bin/bash
test1=/trans/home/stefan01/test1
test2=/trans/home/stefan01/test2
test1=$(stat -c%s "$test1")
test2=$(stat -c%s "$test2")
PERC=$(bc <<< "scale=2; ($test2 - $test1)/$test1 * 100")
echo "$PERC %"

这显示了文件大小的确切百分比差异。我现在可以简单地 if/then 让它在结果为 10% 或更多时显示警告消息。

谢谢你们的帮助。

相关内容