Я использовал, находят, что команда находит файлы на моем жестком диске на 1 ТБ. это берет очень долго. затем я использовал, располагаются, который оказался быстрее с регулярным обновлением с помощью updatedb. Но ограничение располагается, то, что я не могу найти файлы с определенным размером или изменил/создал время. можно ли предложить меня какие-либо идеи о том, как найти файлы на большей скорости или в этом случае как передать вывод по каналу, определяют местоположение команды способом, что вся другая информация как размер, время, и т.д. может быть отображена или перенаправлена в файл.
Я не видел ответа, который бы соответствовал желаниям Чайтаньи. Если вы хотите выполнить поиск по имени файла, комбинация locate, find, ls и grep может быть достаточной. Но я думаю, что Чайтанья хочет искать, например, «все файлы, созданные до 2011 года». Это можно сделать с помощью find, но я могу себе представить, что поиск по 1 ТБ займет много времени (больше зависит от количества файлов, а не от общего размера). Чтобы ускорить это, я думаю, что индексация неизбежна. Проблема поиска (индексации с помощью updatedb) заключается в том, что он не индексирует время создания.
Итак, что нужно Чайтанье - это то, что индексирует необходимые атрибуты файлов (имя файла, размер файла, дата создания и т. Д.). А потом кое-что, что можно искать по этим атрибутам. Насколько я знаю, в Ubuntu для этого нет готового решения.
Важный комментарий Чайтаньи: «Теперь дело в том, что я разрабатываю веб-интерфейс на основе php ...». Поскольку ваша проблема звучит довольно специфично, может быть, вы хотите что-то создать самостоятельно. Некоторые предложения:
Индексируйте файлы в базе данных (с помощью cronjob) и используйте SQL для поиска.
Использование Lucene для индексации и поиска ( Zend Lucene для PHP)
Вы можете попробовать трекер . У него есть демон, который ожидает изменений файлов и обновляет базу данных всеми возможными метаданными, а также клиент, который можно использовать для поиска файлов. Обратите внимание, что он индексирует только пользовательский каталог, а не весь жесткий диск.
Основной недостаток заключается в том, что для индексации ему требуется время ЦП, поэтому используйте его только в том случае, если у вашего компьютера есть запасная энергия.
Вам потребуется установить как сервер, так и клиент, они называются tracker и tracker-gui. Если вы ищете трекер в Центре программного обеспечения, это два первых совпадения. Если вы предпочитаете устанавливать их из командной строки:
sudo apt-get install tracker tracker-gui
Используйте «параметр поиска параметров». Смотрите "человек найти" более подробно. Используйте , найдите , чтобы быстро и легко найти документ, например. "locate * .jpg"
Используйте средство поиска гнома
Это обеспечивает
Ответ на комментарий:
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 за подсказку «что-то» обойти оболочка убегает
Проблема с locate заключается в том, что он собирает информацию о файлах только по регулярному расписанию cron. Если вам требуется mlocate для обновления информации, просто запустите этот
$ sudo /etc/cron.daily/mlocate
Если вам нужно решение, которое более «в режиме реального времени» и постоянно обновляется, я бы предложил использовать нечто, специально предназначенное для следите за своей файловой системой, как tracker-gui
, как сказал Хавьер Ривера.
Чтобы перенаправить вывод locate
в файл, просто используйте стрелку >
вместо символа трубы |
. (Одна стрелка перезаписывает выходной файл, если он уже существует. Две стрелки будут добавлять к выходному файлу, если он уже существует.)
$ locate filename > output.txt # Overwrite
$ locate filename >> output.txt # Append
, как передать вывод по каналу, определяют местоположение команды способом, что вся другая информация как размер, время, и т.д. может быть отображена или перенаправлена в файл.
Много времени и усилия были посвящены решению этой проблемы в этом ответе:
Этот код может быть уменьшен до Вашего 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.