linux - Bash:遍历目录的行为很奇怪

标签 linux bash unix iteration filesize

#!/bin/bash
for dir in "/home/$USER/sessions/out/*/"; do
    size=$(stat -c %s $dir/log)
    if [ 1 -ne 0 ]; then
        echo $size.
    fi
done

今天开始使用 bash。我正在尝试检查 home/sessions/out 中所有目录中日志文件的大小。如果 1!=0(总是,作为测试),应该打印日志的文件大小。我得到的是:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57344001 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 966904.

我希望每个文件大小后都有一个句点,但我实际上得到了一个句点。在到达 if 子句之前,是否所有文件大小都附加到可变大小?我很困惑。

最佳答案

问题是路径名扩展('*'​​ 的扩展)发生在 stat 中调用,不在循环声明中,因为引用的是循环中的路径,而是stat中的路径调用不是。

即只发生一次循环迭代,使用 dir的值为 /home/$USER/sessions/out/*/ .然后在 stat 调用中展开,提供所有匹配 /home/$USER/sessions/out/*/log 的路径至 stat .

解决方案是取消引用循环声明中的路径并在 stat 中引用它调用。

像这样:

#!/bin/bash
for dir in /home/$USER/sessions/out/*/; do
    size=$(stat -c %s "$dir/log")
    if [ 1 -ne 0 ]; then
        echo $size.
    fi
done

关于linux - Bash:遍历目录的行为很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22899455/

相关文章:

linux - 警告 : Could not start program with arguments. 警告:执行格式错误

linux - QEMU arm永久存储

bash - 如何在bash中检查字符串的第一个字符

bash - 从括号中提取字符串

linux - Cygwin:中断阻塞读取

linux - linux系统中的低cpu空闲时间

linux - centos 7中Docker启动失败

php - 使用 PHP 在 ubuntu 中添加用户

bash - 替换所有文件中的字符串 - Unix

linux - zsh: undefined variable 时引发错误