Если Perl opendir всегда возвращается. и.. сначала?
opendir MYDIR, "$dir";
my @FILES = readdir MYDIR;
closedir MYDIR;
Похоже, что 99,9% времени первые две записи в массиве всегда "." а также "..". Более поздняя логика в script имеет проблемы, если это неверно. Я столкнулся с ситуацией, когда записи в каталоге появились позже. Означает ли это, что файловая система повреждена или что-то еще? Есть ли известный порядок возврата opendir?
Ответы
Ответ 1
Это всегда порядок операционной системы, представленный unsorted raw.
Пока. и... очень часто первые две записи, потому что они были первыми двумя созданными элементами. Если по какой-то причине один из них был удален (с помощью неестественных последовательностей, так как он обычно предотвращается), следующий fsck
(или эквивалент) будет исправлять каталог, который будет иметь снова и снова. Это поместит одно из имен в более позднее место в списке.
Следовательно, не просто "пропустите первые две записи". Вместо этого явно сопоставьте их, чтобы отклонить их.
Ответ 2
Порядок не зависит от ОС и явно не определен иначе.
Их достаточно легко отфильтровать.
opendir MYDIR, "$dir";
my @FILES = grep !/^\.\.?$/, readdir MYDIR ;
closedir MYDIR;
Ответ 3
Используйте File:: Slurp:: read_dir, который по умолчанию возвращает список, который не включает .
и ..
.