我试图通过在 for 循环中使用 stat 来获取文件夹中每个文件的文件大小。我知道为什么以下会出错,但我还没有足够的知识来解决这个问题。
#!/bin/bash
for file in .* *; do
size=$(stat --printf="%s")
echo $size
done
但是,由于 stat 缺少文件名,我从逻辑上得到以下错误:
stat: missing operand
Try 'stat --help' for more information.
如何确保 stat 获取每个文件的文件名(仅文件)在文件夹中?
编辑:来自 Powershell 背景,我会使用变量“$_”。 Unix shell 是否提供类似的变量?
答案1
您没有给出任何导致stat
该错误的参数(文件名)。
您正在使用变量file
来存储每个文件名并循环它们,但您没有将文件名作为参数提供给stat
.简而言之,您需要将$file
(变量 的值file
)传递给stat
。
您也可以在一行中完成您正在做的所有事情:
for file in .* *; do stat -c '%s-%n' "$file" ; done
如果您坚持printf
格式化输出,则需要额外的\n
:
for file in .* *; do stat --printf='%s-%n\n' "$file" ; done
我还在这里添加了内容%n
,以便您可以获取正在显示的文件的大小。
编辑 :
如果您只想对不包括目录的文件运行此命令,则需要使用额外的检查。这里我使用test
( [
) 内置函数来检查是否file
是常规文件,如果是,即[ -f "$file" ]
返回退出代码 0,然后 ( )在该文件上&&
运行:stat
for file in .* *; do [ -f "$file" ] && stat -c '%s-%n' "$file" ; done