Почему GNU находит так быстро по сравнению с графическими утилитами поиска файлов?

Если ваш текстовый файл имеет ту же структуру, вы также можете использовать awk

awk -F"," '{print $5}' INPUTFILE.txt >> test.txt 

Также есть cut , как Костас упомянул в комментариях

cut -d"," -f5 INPUTFILE.txt >> test.txt 
47
09.05.2018, 18:14
1 ответ

Если посмотреть конкретно на Dolphin с Baloo, кажется, что он просматривает метаданные каждого файла в своем домене поиска, даже если вы выполняете простой поиск по имени файла. Когда я отслеживаю процесс file.so, я снова вижу вызовы lstat, getxattrи getxattrдля каждого файла и даже для записей ... Эти системные вызовы извлекают метаданные о файле, который хранится в месте, отличном от имени файла (, имя файла хранится в содержимом каталога, но метаданные находятся в inode). Многократный запрос метаданных файла обходится дешево, поскольку данные будут находиться в дисковом кеше, но может быть значительная разница между запросом метаданных и отсутствием запроса метаданных.

findгораздо умнее. Он пытается избежать ненужных системных вызовов. Он не будет вызывать getxattr, потому что не выполняет поиск по расширенным атрибутам. Когда он пересекает каталог,возможно, потребуется вызвать lstatдля несовпадающих -имен файлов, потому что это может быть подкаталог для рекурсивного поиска(lstat— это системный вызов, который возвращает метаданные файла, включая тип файла, такой как обычный/каталог/символическая ссылка/… ). Однако findимеет оптимизацию :, которая знает, сколько подкаталогов есть в каталоге, по его счетчику ссылок , и прекращает вызов lstat, как только узнает, что обошел все подкаталоги. В частности, в листовом каталоге (каталог без подкаталогов ), findпроверяет только имена, а не метаданные. Кроме того, некоторые файловые системы хранят копию типа файла в записи каталога, так что findдаже не нужно вызывать lstat, если это единственная необходимая информация.

Если вы запустите findс параметрами, требующими проверки метаданных, будет выполнено больше lstatвызовов, но по-прежнему не будет lstatвызов файла, если ему не нужна информация. (например, потому что файл исключен по предыдущему условию, соответствующему имени ).

Я подозреваю, что другие инструменты поиска с графическим интерфейсом, заново изобретающие findколесо, так же менее умны, чем утилита командной строки, оптимизация которой велась десятилетиями. Dolphin, по крайней мере, достаточно умен, чтобы использовать базу данных локации, если вы ищете «везде» (с ограничением, неясным в пользовательском интерфейсе, что результаты могут быть устаревшими ).

71
27.01.2020, 19:34

Теги

Похожие вопросы