如何在 stat 命令中包含隐藏文件?

如何在 stat 命令中包含隐藏文件?

在我的代码中,我基本上递归地循环遍历所有文件并使用stat -c%s $i.它适用于 99% 的文件,但是有时我会收到错误:

stat: cannot stat '/media/root/persistence/.Trash-0/info/subory': No such file or directory

当我导航到/media/root/persistence/目录并键入时ls,该./Trash-0文件夹不会显示,因此我认为该文件夹本身及其内容是隐藏的。如何消除此类错误消息并获取其中文件的大小?

答案1

试试这个,它显示所有文件".*"以显示隐藏文件并"*"显示非隐藏文件

stat -c%s .* *

答案2

stat操作隐藏文件没有问题。默认情况下,类 Unix 系统上的程序通常会忽略以 a 开头的文件和目录.,但如果显式指定这些文件,则不会阻止这些程序查看或操作此类文件。

该错误的含义与它所说的完全一样;stat尝试对不存在的文件或目录进行操作。这很可能是因为您的代码首先生成了一个文件列表,然后在迭代该列表时,.../info/subory在您的代码到达它之前被删除、重命名或移动。

考虑到父目录的名称,这可能很简单,就像在代码运行时手动或通过某些自动过程清空桌面上的垃圾一样。

对于这样的瞬态问题,最简单的解决方案是简单地忽略错误,并且可能跳到下一个循环迭代:

stat -c%s $i 2>/dev/null || continue

或者分配一个默认值(用于-1表示出现问题,因为这0是一个有效的大小):

size=$(stat -c%s $i || echo -1)

您还可以在运行之前检查文件或目录是否存在stat

test -e $i && stat -c%s $i

或者使用这些技术的某种组合。

相关内容