Использовать поиск с абсолютным путем.
find /path/ -size +20M
Будет напечатан весь путь.
Если вы не знаете рабочий каталог, используйте подстановку команд для pwd
следующим образом:
find "`pwd`" -size +20M
#or like this:
find "$(pwd)" -size +20M
Чтобы получить рабочий каталог
В любом случае, похоже, что теперь Bash man советую использовать $ ()
вместо «
, поэтому вам следует использовать вторую форму. Вы также, вероятно, можете напрямую обратиться к переменной $ PWD
, которая содержит рабочий каталог вашего скрипта, и, вероятно, будет быстрее, если вам придется использовать в цикле.
find "$PWD" -size +20M
На рассмотрении находится grep
. Когда grep
запускается без имени файла для чтения, он будет читать стандартный ввод. Если вы не предоставите никаких данных для стандартного ввода, он будет выглядеть «зависшим».
Вы также зацикливаете вывод find
. Это неэлегантно (цикл не запустится, пока все пути не будут найдены с помощьюfind
)и опасны (пути будут разделены на пробелы, и оболочка выполнит для них подстановку имен файлов ).
Вместо этого, если вы хотите запустить grep
для всех файлов с определенным суффиксом имени файла:
find. -type f -name '*.md' -exec grep -iF 'heaq' {} +
Я изменил -regex
на стандартный -name
тест с шаблоном, который соответствует только именам файлов с суффиксом имени файла .md
. Я также добавил -type f
, так как имеет смысл запускать grep
только на обычных файлах (возможно, вы захотите изменить -type f
на ! -type d
, чтобы запускать его в любом каталоге, отличном от -, вместо )].
grep
выполняется через -exec
пакетами для найденных путей. Я использую -F
с grep
, так как мы сопоставляем строку, а не регулярное выражение. Вы можете добавить -w
, если хотите сопоставить слово, а не любую подстроку.
Связанные:
вам нужно передать имя файла вgrep
так как
$ for i in $(find. -regex ".*md$"); do grep -i "heaq" $i; done
вы также можете использовать
% grep -i -n "heaq" $(find. -regex ".*md$")
-n
заставляет grep выводить совпадающие номера строк