文件夹大小可变

发布于 2025-01-11 10:49:01 字数 234 浏览 0 评论 0原文

我正在尝试将文件夹大小与大小限制进行比较。当我尝试运行脚本时,它给出错误“需要整数表达式”。

limit=200
foldersize=$(du /home/user1/testfolder)

if [ "$foldersize" -le "limit" ];
then
  echo "Folder size is small"
else
  echo "Folder size is big"
fi

I'm trying to compare a folder size with a size limit. When I try to run the script, it gives me the error 'integer expression expected'.

limit=200
foldersize=$(du /home/user1/testfolder)

if [ "$foldersize" -le "limit" ];
then
  echo "Folder size is small"
else
  echo "Folder size is big"
fi

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甚是思念 2025-01-18 10:49:01

大小需要从 du read <(command) 流,使用制表符和换行符作为字段分隔符,没有记录分隔符,因为 dc 的输出包含要作为单个记录读取的多行。

以下是 du --bytes --summarize --total /home/user1/testfolder 的输出示例:

4954626   /home/user1/testfolder
4954626   total

您的代码已修改:

#!/usr/bin/env bash

declare -i limit=200000
declare -- test_folder=/home/user1/testfolder

declare -i folder_size
IFS=
 \t\n' read -r -d ''  _ _ folder_size _ < <(
  du --bytes --summarize --total "$test_folder"
)

if [[ "$folder_size" -le "$limit" ]];
then
  printf 'Folder size is small\n'
else
  printf 'Folder size is big\n'
fi

The size needs to be read from the du < <(command) stream, with tab and new-line as fields separator and no records delimiter, because the output from dc contains multiple lines to be read as a single record.

Here is an example of output from du --bytes --summarize --total /home/user1/testfolder:

4954626   /home/user1/testfolder
4954626   total

Your code modified:

#!/usr/bin/env bash

declare -i limit=200000
declare -- test_folder=/home/user1/testfolder

declare -i folder_size
IFS=
 \t\n' read -r -d ''  _ _ folder_size _ < <(
  du --bytes --summarize --total "$test_folder"
)

if [[ "$folder_size" -le "$limit" ]];
then
  printf 'Folder size is small\n'
else
  printf 'Folder size is big\n'
fi
远昼 2025-01-18 10:49:01

也许是这样的:

limit=200
folder_size=$(du ~user1/testfolder|cut -d ' ' -f 1)

if (( folder_size <= limit ))
then
  echo Folder size is small
else
  echo Folder size is big
fi

或者,没有变量,

if (( $(du ~user1/testfolder|cut -d ' ' -f 1) <= 200 ))
then
  ...
else
  ...
fi

Perhaps something like this:

limit=200
folder_size=$(du ~user1/testfolder|cut -d ' ' -f 1)

if (( folder_size <= limit ))
then
  echo Folder size is small
else
  echo Folder size is big
fi

or, without variables,

if (( $(du ~user1/testfolder|cut -d ' ' -f 1) <= 200 ))
then
  ...
else
  ...
fi
沧桑㈠ 2025-01-18 10:49:01

这样做:

du -s /home/user1/testfolder |cut -f1

而不是:

du /home/user1/testfolder   

do this:

du -s /home/user1/testfolder |cut -f1

instead of :

du /home/user1/testfolder   
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文