opendir MYDIR, "$dir";
my @FILES = readdir MYDIR;
closedir MYDIR;
似乎 99.9% 的时间数组中的前两个条目总是“.” 和 ”..”。如果不正确,脚本中的后续逻辑会出现问题。我遇到了后来出现目录条目的情况。这是否表明文件系统已损坏或其他原因?opendir 返回的内容是否有已知的顺序?
它始终是操作系统顺序,以未排序的原始形式呈现。
尽管 。和 .. 通常是前两个条目,这是因为它们是创建的前两个条目。如果由于某种原因,其中一个被删除(通过非自然序列,因为它通常被阻止),下一个fsck
(或等效的)将修复目录以再次拥有两者。这会将其中一个名称放在列表中稍后的位置。
因此,不要只是“跳过前两个条目”。相反,明确匹配它们以拒绝它们。
该顺序取决于操作系统,并且没有明确定义。
它们很容易被过滤掉。
opendir MYDIR, "$dir";
my @FILES = grep !/^\.\.?$/, readdir MYDIR ;
closedir MYDIR;
使用File::Slurp::read_dir,默认情况下,它返回一个不包含.
and的列表..
。