Как найти файл во FreeBSD

14

Я пытаюсь найти все копии example.filenameна моем сервере FreeBSD. Какой самый лучший / самый простой / самый эффективный способ сделать это?

Ян
источник
1
Хотя ответы будут схожими, вы можете уточнить, используете ли вы Linux или FreeBSD. Они не одно и то же.
Грег Хьюгилл
отредактированное название , чтобы сделать ОС более конкретные
Ian
Это, вероятно, должно быть помечено FreeBSD, но у меня нет репутации, чтобы сделать это.
Микл

Ответы:

18
find / -name example.filename
Клетус
источник
2
Надежно, но медленно. Иногда очень медленно.
dmckee --- котенок экс-модератора
3
другие флаги 'find', которые могут быть подходящими, в зависимости от необходимости: -type f (не будет беспокоиться о каталогах или символических ссылках с тем же именем) -ls (чтобы показать детали, такие как размер файла, например, если файлы имеют одинаковые имя, но другое содержание)
Зак Томпсон
19
locate filename

Гораздо быстрее, чем find, если вы используете службу locate, и она находит только файлы, которые существовали на момент updatedbпоследнего запуска (обычно ночью перед управлением заданием cron).

Вы можете запустить updatedbвручную, но это даже медленнее , чем Клетус предполагает и требует корня. Иногда я обновляю базу данных вручную после установки новых вещей.find

dmckee --- котенок экс-модератора
источник
3
Locate работает, только если у вас запущена служба для создания базы данных locate (забудьте, как она называется). Он также может страдать из-за задержки по времени (так как искомый файл может быть добавлен с момента последней сборки).
Клет
Правки и комментарии пересеклись на проводе. Здорово. Вы, конечно, правы по обоим пунктам.
dmckee --- котенок экс-модератора
4
Если вы обнаружите, что делаете find /или работаете с большим деревом чаще, чем раз в неделю, то запуск locateслужбы, вероятно, стоит того, потому что locate(1)он намного быстрее.
Дрю Стивенс
@cletus Running sudo periodic weeklyобновляет locateбазу данных. Запустите его после любой установки или загрузки, которая может содержать нужные вам файлы.
Василий Бурк
2

Если у вас установлен locate (он же slocate), то

locate example.filename

locate каждый вечер запускает задание cron, которое переиндексирует все файлы на вашем компьютере. По этой причине это не всегда актуально.

Пол Томблин
источник
2

Иногда вы хотите найти файлы на определенном уровне каталога. В этом случае может быть удобно использовать подстановочные знаки оболочки:

ls /data/*/example.filename

Очевидно, это работает, только если у вас жесткая структура каталогов.

Джон Эриксон
источник
1

locate

Как уже упоминалось, locateэто быстрый способ найти файл. Эта команда использует предварительно скомпилированный индекс имен файлов и папок. Эта база данных имен ищется, а не сканируется в вашей файловой системе.

locate example.filename 

Чтобы не учитывать регистр, добавьте -i.

locate -i eXAmPle.FileName

Обновить locateбазу данных

Используемая база данных locateдолжна быть актуальной. После установки или загрузки, которая может содержать нужный файл, необходимо обновить locateбазу данных.

locateБаза данных будет в конечном итоге будет автоматически обновляться в вашей системе FreeBSD. Существует еженедельный набор дел, включающий эту задачу. Эти обязанности перечислены в /etc/periodic/weekly/310.locateсценарии.

Самый простой и безопасный способ форсировать раннее обновление locateбазы данных - это сделать еженедельный набор дел по дому сейчас.

sudo periodic weekly

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

sudo periodic daily weekly monthly

Если вы используете другие способы для обновления locateбазы данных, вы можете получить сообщение о том, что это небезопасно, раскрывая имена всех файлов вашей системы любому пользователю в системе FreeBSD. Использование periodicмаршрута позволяет избежать этой проблемы.

Базилик Бурк
источник
0

Если у вас есть актуальная база данных locate, просто:

locate example.filename
Софи Альперт
источник
0

Я иногда делаю


  find . | grep example.filename

вероятно, чрезвычайно неэффективно, однако.

kgrad
источник
Да, это соответствует всему, а затем выбрасывает все, кроме того имени, которое вы искали. Вместо этого вы можете просто выполнить команду 'find -name "example.filename"', которая делает то же самое без предварительной печати всего и без запуска дополнительного процесса grep.
Михай Лимбашан