Какова временная сложность команды 'ls' при запуске в файловой системе ext4? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть пара сотен тысяч файлов в одном из каталогов на сервере Redhat Linux.

Мне нужно выполнить ls -t, чтобы получить имя последнего отредактированного файла и загрузить имя файла в база данных. В последнее время я начал сталкиваться с проблемами, так как количество файлов в каталоге продолжает расти, и я хочу знать временную сложность команды 'ls', когда она выполняется в файловой системе ext4.

Кроме того, что является лучшим способом сделать это?

1 Ответ

1 голос
/ 29 апреля 2020

Поскольку вы работаете на linux os, вы можете просто использовать inotify tools . Существует несколько очень простых в использовании инструментов командной строки для отслеживания каждого изменения в файловой системе с использованием интерфейса ядра inotify.

Пример:

> inotifywait -m -e create -e modify test/ --format '%:e %f'

Приведенная выше команда ожидает бесконечно (-m -> монитор) для события (-e) создает и изменяет файлы внутри test/, который является каталогом, и выводит с отформатированной строкой, где %e заменяется событием, а %f заменяется созданным или измененным имя файла.

если вы теперь запускаете в отдельной оболочке некоторые проверки вроде:

> touch test/newfile1
> touch test/newfile2
> echo hallo > test/newfile2

Вывод команды:

Setting up watches.
Watches established. 
CREATE newfile2
MODIFY newfile2

Довольно просто написать имя файла теперь в базе данных без повторного чтения всего каталога.

...