如何将作为参数传递的文件的大小与兆字节数进行比较?

如何将作为参数传递的文件的大小与兆字节数进行比较?

我有一个使用文件或目录作为参数的脚本,我想将该文件与任意数量的兆字节进行比较,以查看该文件是否大于、小于或等于 1 兆字节。

我认为答案是:

#!/bin/bash

FILE=$1 
export FILE1 

if [ -f$1 ];

then  
        echo "Hello world!" 

fi 

  if [ $# -lt 1 ]; then 
       echo "This file is less than 1 megabyte"
fi

我正在尝试将此文件作为参数传递,并查看它是否小于一兆字节。现在,我需要知道 $# -lt 1 实际上是否小于 1 兆字节或小于整数 1。

答案1

正如一些评论者/回答者所说,您的脚本没有获取传入文件的大小。您需要这样做才能将其与兆字节进行比较。

一种选择是stat命令:

bytes=$(stat -c %s filename_here)

另一个选项是wc命令:

bytes=$(wc -c < filename_here)

接下来,您想将其与 1 MB 进行比较; bash 算术仅限于整数,因此尝试与小数进行比较注定会失败。相反,请与 1048576 字节进行比较。

总结一下,它可能是:

#!/bin/bash

if [ -f "$1" ];
then  
  echo "Hello world!"
  bytes=$(stat -c %s "$1")
  if [ "$bytes" -lt 1048576 ]; then 
    echo "This file is less than 1 megabyte"
  fi
fi

我将大小计数移到了第一个if语句中;检查不存在的文件的大小是没有意义的。另外,除非您对参数执行其他操作,否则实际上没有必要使用另一个变量名,所以我只是继续使用$1.

答案2

您的脚本中存在逻辑和语法错误。

  • 您分配FILE并导出FILE1(不会造成伤害,但也没有意义)。
  • 你既不使用FILEFILE1不再使用(相同)。
  • 您需要在“条件主”和文件名之间有一个空格[ -f$1 ]
  • 产生$#脚本的参数计数,而不是文件大小(正如 Filipe Brandenburger 已经指出的那样)
  • 除了stat您可以使用的信息之外,您还需要一个替代信息源du -b file

相关内容