Нахождение имен файлов без каталогов

Как может я использовать найти для нахождения файлов без предыдущего каталога (./) способом, который также работает с - должностное лицо?

Моя цель к grep через журнал Apache, чтобы видеть, получили ли к какому-либо из файлов недавно доступ. Это - то, что я имею до сих пор:

find . -max-depth 1 -type d \
  -exec grep \"GET /{}\" /var/log/apache2/blah.com \;

Я нашел решение с помощью-printf "%f\n", но это не работает с - должностное лицо.

3
задан 19.11.2010, 09:51

3 ответа

find . -maxdepth 1 -type d -printf "%f\0" | \
     xargs -0 -I {} grep 'GET /{}' /var/log/apache2/blah.com
2
ответ дан 08.12.2019, 00:34

Попытка:

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' \;
2
ответ дан 08.12.2019, 00:34

Так как Вы не делаете рекурсивного поиска, нет никакой потребности использовать 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 вывод.

0
ответ дан 08.12.2019, 00:34

Теги

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