【问题标题】:How to check if a file's size is greater than a certain value in Bash如何检查文件的大小是否大于 Bash 中的某个值
【发布时间】:2017-10-19 06:39:08
【问题描述】:

如何实现以下目标:

  • 我需要检查文件的大小
  • 然后使用 if 条件和相应的条件语句将此文件大小与固定数字进行比较

到目前为止,我有以下内容:

#!/bin/bash

# File to consider
FILENAME=./testfile.txt

# MAXSIZE is 5 MB
MAXSIZE = 500000

# Get file size
FILESIZE=$(stat -c%s "$FILENAME")
# Checkpoint
echo "Size of $FILENAME = $FILESIZE bytes."

# The following doesn't work
if [ (( $FILESIZE > MAXSIZE)) ]; then
    echo "nope"
else
    echo "fine"
fi

使用此代码,我可以在变量 $FILESIZE 中获取文件名,但无法将其与固定整数值进行比较。

#!/bin/bash
filename=./testfile.txt
maxsize=5
filesize=$(stat -c%s "$filename")
echo "Size of $filename = $filesize bytes."

if (( filesize > maxsize )); then
    echo "nope"
else
    echo "fine"
fi

【问题讨论】:

  • if [ (( $FILESIZE > MAXSIZE)) ]; -> if (( FILESIZE > MAXSIZE )); 算术运算符可以用作条件表达式。 (在((...)) 中不需要$)

标签: bash shell


【解决方案1】:

几个句法问题。

  1. Bash 中的变量定义不包含空格。应该是MAXSIZE=500000,没有空格。
  2. 进行比较操作的方式不正确。除了if [ (( $FILESIZE > MAXSIZE)) ];,您还可以单独使用 Bash 自己的算术运算符,然后将 [ 运算符跳过到 if (( FILESIZE > MAXSIZE)); then

如果您担心脚本中的语法问题,请使用ShellCheck 对您的脚本进行语法检查并修复从中看到的错误。


作为一般的编码习惯,在 Bash 中使用 小写 用户定义的变量,以避免将它们与 shell 为不同目的解释的特殊环境变量混淆(例如,$HOME 和 @ 987654327@).

【讨论】:

    【解决方案2】:

    您也可以使用find 命令来完成此操作。请参阅以下示例。

    您可以将 stat 命令更改为您需要的任何命令。

    ls -lh test.txt
    
    -rw-r--r-- 1 root root 25M Jan 20 19:36 test.txt
    
    
    find ~/test.txt -size 25M -exec stat '{}' \;
    
      File: '/root/test.txt'
      Size: 26214400        Blocks: 51200      IO Block: 4096   regular file
    Device: fe04h/65028d    Inode: 402704      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2022-01-20 19:36:51.222371293 +0000
    Modify: 2022-01-20 19:36:51.242373113 +0000
    Change: 2022-01-20 19:36:51.242373113 +0000
     Birth: -
    

    如果文件的大小不符合您的要求,则不会执行任何操作。

    find ~/test.txt -size 99M -exec true \;
    

    【讨论】:

      猜你喜欢
      • 2019-08-24
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 2012-06-01
      相关资源
      最近更新 更多