Что верный способ состоит в том, чтобы найти всеми файлами и/или путем, который содержит 2 ключевых слова?

Файл должен принадлежать и записываемый корнем. Также удостоверьтесь, что Ваша спецификация времени корректна - * * * * * реальный?

1
06.04.2013, 02:27
1 ответ

Можно объединить два шаблона (или в более общем плане несколько критериев) в find.

find . -ipath '*sitesearch*' -ipath '*demo*'

или если Вы предпочитаете regex синтаксис

find . -iregex '.*sitesearch.*' -iregex '.*demo.*'

ls с полным путем на каждой строке” (плюс пересекающие каталоги рекурсивно, который очевидно необходим здесь) был бы find. В то время как можно работать find | grep -i demo | grep -i sitesearch, выполнение всего этого с find вероятно, будет явно быстрее.

Если Вы делаете это много, можно сделать это функцией (вставьте его Ваш ~/.kshrc или ~/.bashrc или ~/.zshrc):

findallof () {
  typeset -a pred
  pred=(.)
  typeset x
  for x do
    pred=("${pred[@]}" -ipath "*$x*")
  done
  find "${pred[@]}"
}

Обратите внимание также, что можно искать файлы по имени с locate (проверьте страницу справочника в своей системе, поскольку существует несколько реализаций даже на Linux).

locate -i sitesearch | grep -i demo

Это может быть быстрее, чем просмотр большого дерева каталогов, потому что locate запрашивает индекс (хотя поиски без учета регистра имеют тенденцию не быть этим быстро). Однако индекс обычно восстанавливается только каждую ночь, таким образом, он не покажет файлы, созданные сегодня. Файлы, которые не находятся в публично читаемом каталоге, могут или не могут быть индексированы в зависимости от реализации (проверка, если /usr/bin/locate корневой двоичный файл setuid: если это, частные файлы индексируются и locate управляйте показывает Вам только файлы, к которым можно получить доступ).

6
27.01.2020, 23:15
  • 1
    Потребности -ipath вместо -iname или это не найдет some/path/SiteSearch/demo/index.html как grep был бы. Также отсутствие * после демонстрации. –  frostschutz 06.04.2013, 03:33
  • 2
    позже, я нашел это find . | grep -i demo | grep -i sitesearch должен сделать задание также. Но Вашим решением является всего одна команда, таким образом, это должно быть более хорошо. Вы знаете, как превратить его в функции так, чтобы мы могли просто сказать find1 sitesearch или find2 demo sitesearch или если лучше мы не должны говорить find1 или find2 но просто findallof –  nopole 06.04.2013, 05:10
  • 3
    動靜能量 Вы может сделать это функцией (см. мое редактирование). –  Gilles 'SO- stop being evil' 06.04.2013, 15:01
  • 4
    , эта функция не работает над Mac... у Вас есть версия, которая могла бы работать и над Mac и над Linux? –  nopole 07.04.2013, 10:01
  • 5
    動靜能量 С . после find? GNU находит, не нуждается в нем, но я думаю, что BSD находят, делает. –  Gilles 'SO- stop being evil' 07.04.2013, 16:51

Теги

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