Как может я использовать найти для нахождения файлов без предыдущего каталога (./) способом, который также работает с - должностное лицо?
Моя цель к grep через журнал Apache, чтобы видеть, получили ли к какому-либо из файлов недавно доступ. Это - то, что я имею до сих пор:
find . -max-depth 1 -type d \
-exec grep \"GET /{}\" /var/log/apache2/blah.com \;
Я нашел решение с помощью-printf "%f\n", но это не работает с - должностное лицо.
Попытка:
grep -Ff <(find . -maxdepth 1 -type d | sed -e 's,^\.,GET ,') /var/log/apache2/blah.com
Или, если Вы хотите занять место {} в find
команда:
find . -maxdepth 1 -type d -exec bash -c 'F={}; F=${F#./}; grep -F "GET /$F" /var/log/apache2/blah.com' \;
Так как Вы не делаете рекурсивного поиска, нет никакой потребности использовать find
, если Вы не хотели включать только каталоги и не символьные ссылки на каталоги. Принятие там не является никакими каталогами, имя которых начинается с точки (если существует, использовать for x in .*/ */; do …
), следующее будет искать названия всех каталогов и символьных ссылок на каталоги в текущем каталоге:
for x in */; do grep -F "GET /${x%/}" /var/log/apache2/blah.com; done
При выполнении рекурсивного поиска Вы могли бы избежать ведущей точки путем поиска от *
вместо .
(тот же комментарий как выше оценки имен, начинающихся с точки).
find * -type d -exec grep -F "GET /${x%/}" /var/log/apache2/blah.com
Другая возможность состоит в том, чтобы постобработать вывод find
. Это особенно полезно в сочетании со способностью grep искать несколько разделенных от новой строки шаблонов.
grep -F "$(find . -type d | sed -e 's!^\.!GET !')" /var/log/apache2/blah.com
Обратите внимание, что во всех случаях Вы предполагаете, что нет никаких символов в именах каталогов, которых оставили бы в журнале Apache. Это разрешимо с немного дальнейшей постобработкой find
вывод.