Как я могу найти файлы более быстрыми, чем находят или располагаются?

Я использовал, находят, что команда находит файлы на моем жестком диске на 1 ТБ. это берет очень долго. затем я использовал, располагаются, который оказался быстрее с регулярным обновлением с помощью updatedb. Но ограничение располагается, то, что я не могу найти файлы с определенным размером или изменил/создал время. можно ли предложить меня какие-либо идеи о том, как найти файлы на большей скорости или в этом случае как передать вывод по каналу, определяют местоположение команды способом, что вся другая информация как размер, время, и т.д. может быть отображена или перенаправлена в файл.

8
задан 1 June 2012 в 18:16

7 ответов

Я не видел ответа, который бы соответствовал желаниям Чайтаньи. Если вы хотите выполнить поиск по имени файла, комбинация locate, find, ls и grep может быть достаточной. Но я думаю, что Чайтанья хочет искать, например, «все файлы, созданные до 2011 года». Это можно сделать с помощью find, но я могу себе представить, что поиск по 1 ТБ займет много времени (больше зависит от количества файлов, а не от общего размера). Чтобы ускорить это, я думаю, что индексация неизбежна. Проблема поиска (индексации с помощью updatedb) заключается в том, что он не индексирует время создания.

Итак, что нужно Чайтанье - это то, что индексирует необходимые атрибуты файлов (имя файла, размер файла, дата создания и т. Д.). А потом кое-что, что можно искать по этим атрибутам. Насколько я знаю, в Ubuntu для этого нет готового решения.

Важный комментарий Чайтаньи: «Теперь дело в том, что я разрабатываю веб-интерфейс на основе php ...». Поскольку ваша проблема звучит довольно специфично, может быть, вы хотите что-то создать самостоятельно. Некоторые предложения:

  • Индексируйте файлы в базе данных (с помощью cronjob) и используйте SQL для поиска.

  • Использование Lucene для индексации и поиска ( Zend Lucene для PHP)

0
ответ дан 1 June 2012 в 18:16

Вы можете попробовать трекер . У него есть демон, который ожидает изменений файлов и обновляет базу данных всеми возможными метаданными, а также клиент, который можно использовать для поиска файлов. Обратите внимание, что он индексирует только пользовательский каталог, а не весь жесткий диск.

Основной недостаток заключается в том, что для индексации ему требуется время ЦП, поэтому используйте его только в том случае, если у вашего компьютера есть запасная энергия.

Вам потребуется установить как сервер, так и клиент, они называются tracker и tracker-gui. Если вы ищете трекер в Центре программного обеспечения, это два первых совпадения. Если вы предпочитаете устанавливать их из командной строки:

sudo apt-get install tracker tracker-gui
0
ответ дан 1 June 2012 в 18:16

Используйте «параметр поиска параметров». Смотрите "человек найти" более подробно. Используйте , найдите , чтобы быстро и легко найти документ, например. "locate * .jpg"

0
ответ дан 1 June 2012 в 18:16

Используйте средство поиска гнома

Это обеспечивает

  • Содержание файла
  • Дата модификации
  • Размер
  • Пустота файла
  • Владелец/Группа
  • Исключение шаблона имени
  • Назовите соответствие регулярного выражения
  • Скрытые файлы и файлы резервных копий
0
ответ дан 1 June 2012 в 18:16

Ответ на комментарий:

ls -la "$(locate -d external.db "Duel of Fates (Darth ")"

производит:

-rw-rw-r-- 1 user group 4075134 2012-03-30 22:37 /home/user/Music/Star Wars: Episode 1 - Duel of Fates (Darth Maul's Theme).mp3

Thx @Oli в чате AskUbuntu за подсказку «что-то» обойти оболочка убегает

0
ответ дан 1 June 2012 в 18:16

Проблема с locate заключается в том, что он собирает информацию о файлах только по регулярному расписанию cron. Если вам требуется mlocate для обновления информации, просто запустите этот

$ sudo /etc/cron.daily/mlocate

Если вам нужно решение, которое более «в режиме реального времени» и постоянно обновляется, я бы предложил использовать нечто, специально предназначенное для следите за своей файловой системой, как tracker-gui, как сказал Хавьер Ривера.

Чтобы перенаправить вывод locate в файл, просто используйте стрелку > вместо символа трубы |. (Одна стрелка перезаписывает выходной файл, если он уже существует. Две стрелки будут добавлять к выходному файлу, если он уже существует.)

$ locate filename > output.txt  # Overwrite
$ locate filename >> output.txt # Append
0
ответ дан 1 June 2012 в 18:16

, как передать вывод по каналу, определяют местоположение команды способом, что вся другая информация как размер, время, и т.д. может быть отображена или перенаправлена в файл.

Много времени и усилия были посвящены решению этой проблемы в этом ответе:

Этот код может быть уменьшен до Вашего locate потребности:

$ time locate -0 *.mp4 | xargs -0 ls -s

     4 /home/rick/askubuntu/subdir-A/1.mp4
     4 /home/rick/askubuntu/subdir-A/2.mp4
         ( ... SNIP ... )
  3684 /mnt/d/Windows/WinSxS/amd64_microsoft-windows-winsatmediafiles_31bf3856ad364e35_10.0.10586.0_none_51eff420121c1922/Clip_480_5sec_6mbps_h264.mp4
 35972 /mnt/old/home/rick/Videos/VID_20180701_233225.mp4

real    0m0.900s
user    0m0.826s
sys     0m0.084s

Разрушение locate -0 *.mp4 | xargs -0 ls -s:

  • locate -0 - определять местоположение команда обычно печатает новую строку (\n) в конце каждой записи. 0 сообщает, располагаются для разделения записей с пустым байтом вместо этого.
  • *.mp4 Располагаются, все файлы, заканчивающиеся в .mp4 (звуковые файлы)
  • |, символ вертикальной черты. Независимо от того, что печатается, располагаются, команда не переходит к экрану, но перенаправляется к следующей команде.
  • xargs -0 - команда xargs берет запись выводом записи от предыдущей команды (располагаются), и передает его следующей команде. -0 показывает, что записи разделяются пустым байтом, а не новой строкой (\n) разделитель.
  • ls -s Эти ls управляют, назван [1 113] и передал имя файла для списка. Эти -s флаг говорит ls включать размер файла.

, Как Вы видите, процесс занимает меньше чем 1 секунду для более чем миллиона файлов в трех Ubuntus и двух разделах Windows.

0
ответ дан 23 November 2019 в 05:55

Другие вопросы по тегам:

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