Причина отсутствия «стандартного инструмента» в том, что логика, как вы обнаружили, довольно проста.Ограничивающим фактором является то, что вы должны выполнять глубокий обход каталога, а это всегда дорогостоящий процесс.
На самом деле не имеет значения, какой подход вы выберете в отношении инструментов создания сценариев - «стоимость» - это дисковый ввод-вывод.
Итак, оптимизация, которую я предлагаю, была бы такой:
find | shuf
и find | head
этого не сделают). mtime
помогут вам построить оба списка. Если вы генерируете случайное число и выбираете «последний» файл и последний последний файл перед этим номером. Что-то вроде этого (В perl
, но я уверен, что вы могли бы сделать это на Python)
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
my $random_file;
my $recent_random_file;
my $limit = rand ( 7_000_000 ); #ideally set to file count on fs.
sub search {
if ( $count++ > $limit ) {
$File::Find::prune = 1; #stop traversing
return;
}
return unless -f;
if ( -M $File::Find::name < 1 ) { $recent_random_file = $File::Find::name };
$random_file = $File::Find::name;
}
find ( \&search, "/path/to/search");
print "$recent_random_file $random_file\n";
Исходная ошибка возникает из-за того, что драйвер libvirt вызывает guest.migrate_configure_max_speed
здесь:
https://github.com/openstack/nova/blob/stable/pike/nova/virt/libvirt/driver.py#L6944
Этот метод не был добавлен в гостевой модуль до выхода Pike(https://github.com/openstack/nova/commit/23446a9552b5be3b040278646149a0f481d0a005)и, по-видимому, не был портирован на Pike, поскольку здесь он отсутствует:
https://github.com/openstack/nova/blob/stable/pike/nova/virt/libvirt/guest.py
Вызов guest.migrate_configure_max_speed
был добавлен в драйвер в этом коммите:https://github.com/openstack/nova/commit/ff747792b8f5aefe1bebb01bdf49dacc01353348
Вы можете вручную исправить guest.py без операции -, чтобы обойти ошибку:
def migrate_configure_max_speed(self, bandwidth):
pass