#!/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/