for循环中的文件大小

for循环中的文件大小

我试图通过在 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

相关内容