gpt4 book ai didi

bash - 在 bash shell 中添加文件大小

转载 作者:行者123 更新时间:2023-12-04 16:17:10 25 4
gpt4 key购买 nike

我编写了一个 shell 脚本,它将目录作为 arg 并打印文件名和大小,我想了解如何将文件大小相加并存储它们,以便我可以在循环后打印它们。我已经尝试了一些事情,但到目前为止还没有任何进展,有什么想法吗?

#!/bin/bash

echo "Directory <$1> contains the following files:"
let "x=0"
TEMPFILE=./count.tmp
echo 0 > $TEMPFILE
ls $1 |
while read file
do
if [ -f $1/$file ]
then
echo "file: [$file]"
stat -c%s $file > $TEMPFILE
fi
cat $TEMPFILE
done
echo "number of files:"
cat ./count.tmp

我们将不胜感激。

最佳答案

您的代码中存在一些问题:

假设您只是想在这方面进行练习和/或想做除 之外的其他事情已经这样做了,您应该将语法更改为类似

#!/bin/bash

dir="$1"
[[ $dir == *'/' ]] || dir="$dir/"
if [[ -d $dir ]]; then
echo "Directory <$1> contains the following files:"
else
echo "<$1> is not a valid directory, exiting"
exit 1
fi

shopt -s dotglob
for file in "$dir"*; do
if [[ -f $file ]]; then
echo "file: [$file]"
((size+=$(stat -c%s "$file")))
fi
done

echo "$size"

注意:

  • 您不必在 bash 中预先分配变量,$size 假定为 0
  • 对于不需要小数位的数学,您可以使用 (())
  • 您可以使用 globs (*) 获取特定目录中的所有文件(包括目录、符号链接(symbolic link)等...)(以及 globstar ** 用于递归)
  • shopt -s dotglob 是必需的,因此它在 glob 匹配中包含隐藏的 .whatever 文件。

关于bash - 在 bash shell 中添加文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21532870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com