Dir будет намного быстрее, так как это двоичный код, который, как я подозреваю, очень оптимизирован, поэтому он может быстро получать и форматировать информацию.
В вашем скрипте кажется, что вы выполняете несколько вызовов, которые нужно интерпретировать, одно для времени и другое для размера. Даже если более низкие вызовы в Perl являются двоичным кодом, чтобы получить информацию, она, вероятно, должна пройти через несколько уровней. Вы можете уменьшить количество вызовов по предложению @mob, сохранив возвращаемые значения stat и получив доступ к необходимым вам частям. Например:
@items = stat($file);
$size = $items[7];
$modified = $items[9];
, который сохранит один из вызовов и, возможно, ускорит выполнение сценария.
Если вам нужны все файлы, вы можете сделать системный вызов для выполнения команды каталога и перенаправить вывод в файл, после чего вы можете проанализировать файл, чтобы получить информацию о времени и размере. Это может быть немного быстрее в зависимости от количества файлов. (/ 4 будет 4 цифры года,/т: ж будет, когда она была последней записью/модифицированы и/с избавятся от запятых в размере)
system("dir /4 /t:w /-c $path > tempList.txt");
Затем откройте и разобрать перенаправлен файл информацию, которую вы желаете.
open my $in,"tempList.txt" die "Unable to open file tempList.txt";
my @lines = <$in>;
close($in);
chomp(@lines);
foreach (@lines)
{
next if (! (m/^\d{4}\/\d{2}\/\d{2}\s+); # Not a line with a file
@parts = split('\s+');
# Get the parts you need (time and size, where you may have to some other
# work to get it in the desired format
#.....
}
Возможно добавить регулярное выражение, чтобы сделать согласование и вытащить детали, как вам нужно их при тестировании, если вы хотите обработать строку. Это может сэкономить время и силы.
Пока вы звоните 'stat', получить размер файла с' (стат ($ файл)) [7] ', – mob
@mob может вам скажите мне разницу между использованием stat и -s? Спасибо –
@ A-Kay Операторы тестовых файлов, такие как '-s', фактически вызывают системный вызов' stat' за кулисами, поэтому, если вы вызываете '-s', за которым следует' stat', вы делаете два системных вызова, когда только один необходим. – ThisSuitIsBlackNot