opendir MYDIR, "$dir";
my @FILES = readdir MYDIR;
closedir MYDIR;
似乎99.9%的时间数组中前两个条目总是“。”和“..”。如果不是这样,脚本中的后来逻辑就会出现问题。我遇到了以后出现目录条目的情况。这是否表明文件系统已损坏或其他?是否有一个已知的命令,以什么opendir返回?
答案 0 :(得分:21)
始终是操作系统订单,未按原样显示。
虽然。和...通常是前两个条目,这是因为它们是创建的前两个条目。如果由于某种原因,其中一个被删除(通过不自然的序列,因为它通常被阻止),下一个fsck
(或等效的)将修复目录以再次拥有它们。这会将其中一个名称放在列表的后面。
因此,不要只是“跳过前两个条目”。相反,明确地匹配它们以拒绝它们。
答案 1 :(得分:8)
订单由操作系统决定,明确没有另外定义。
它们很容易过滤掉。
opendir MYDIR, "$dir";
my @FILES = grep !/^\.\.?$/, readdir MYDIR ;
closedir MYDIR;
答案 2 :(得分:6)
使用File::Slurp::read_dir,默认情况下会返回不包含.
和..
的列表。