Как я могу заставить grep только возвращать файлы и игнорировать каталоги?

Я пытаюсь использовать grep, чтобы автоматически найти программу bibtex в папке bin пользователя.

Проблема в том, что он часто возвращает каталог с именем bibtex, что означает, что сценарий не может автоматически выполнить команду.

Как я могу заставить grep (или действительно команду locate) автоматически игнорировать каталоги?

РЕДАКТИРОВАТЬ: текущая команда: locate bibtex | grep "/bibtex$" -d skip | head -n1

4 ответа

Решение

Вздох, не мой чистейший, но это работает. perl -ne 'chomp($f=$_);print if !-d $f'

который делает вашу команду locate bibtex | perl -ne 'chomp($f=$_);print if !-d $f' | grep "/bibtex$" -d skip | head -n1

find команда?

find /bin -name bibtex -type f

Ищет имя файла "bibtex" типа "f", который является обычным файлом.

locate --basename '\bibtex' --limit 1

Устраняет необходимость grep а также head, но все еще не решает вопрос о том, является ли результат каталогом.

Почему бы тебе не сделать:

type -P bibtex

который будет выглядеть в PATH для программы с таким именем?

Я не совсем понимаю, так что, возможно, мое решение неверно: почему вы не используете какой? Или bibtex не в PATH?

Другие вопросы по тегам