Эффективное нахождение первого файла (в лексикографическом смысле) среди нескольких каталогов
У меня есть сотни папок, и каждая папка содержит тысячи файлов. Я хочу идентифицировать "первый" файл среди всех файлов всех папок, "первый" определяется лексикографическим порядком имен файлов (исключая пути). Например:
/a/abc.txt
/b/aac.txt
/b/bxz.txt
Тогда результат должен быть aac.txt
,
Я в настоящее время использую это:
find . -iname "*" -printf "%f\n" | sort | head
Но это довольно медленно. Есть ли лучшее решение?
1 ответ
Я не думаю, что вы можете сделать это намного быстрее, так как вам нужно сначала получить вывод find
которая является самой продолжительной операцией, и только потом ее можно пропустить sort
а также head
,
И если вы даже подумываете о том, чтобы собрать некоторый код вместе, чтобы он работал быстрее, я думаю, что улучшение (если есть) по сравнению с find
было бы незначительным по сравнению с количеством времени, необходимого для его написания и сделать его более эффективным, чем find
,
Если это не то, чем вы занимаетесь регулярно, и набор данных огромен (тысячи не так много), я бы не стал тратить на это свое время на вашем месте.