2012-05-07 20 views
5

Próbuję użyć polecenia grep, aby automatycznie zlokalizować program bibtex w folderze bin użytkownika.Jak zmusić grep do zwracania plików i ignorowania katalogów?

Problem polega na tym, że często zwraca katalog o nazwie bibtex, co oznacza, że ​​skrypt nie uruchamia automatycznie polecenia.

Jak wymusić grep (lub polecenie locate), aby automatycznie ignorować katalogi?

EDIT: prąd polecenia: locate bibtex | grep "/bibtex$" -d skip | head -n1

Odpowiedz

1

Sigh, nie mój najczystszy, ale działa. perl -ne 'chomp($f=$_);print if !-d $f'

co sprawia, że ​​komenda locate bibtex | perl -ne 'chomp($f=$_);print if !-d $f' | grep "/bibtex$" -d skip | head -n1

+0

'-d przeskok' nie wykonuje tutaj żadnej akcji, ponieważ wejście do' grep' to 'stdin'. Możesz skrócić swoje polecenie do 'perl -ne 'chomp; wydrukuj, jeśli! -d'' –

+0

To był mój pierwszy raz, ale nie byłem pewien, czy brakujące żyłki doprowadzą do problemów w późniejszym okresie łańcucha rur. Sądzę, że jestem Nerwowym Nerwem w ten sposób. –

+0

Nawiasem mówiąc, możesz to skrócić do 'perl -lne 'print if! -d'' (chomp nie wydaje się być koniecznym, jeśli to było wtedy' perl -lne' chomp; print if! -d ' '). –

12

Komenda find?

find /bin -name bibtex -type f 

Szuka nazwy pliku "bibtex" typu "f", który jest zwykłym plikiem.

+1

icecreamhead, natychmiast zaakceptuj tę odpowiedź, ponieważ Twoje poszukiwania się kończą :-) –

+0

Ta odpowiedź rzeczywiście działa, ale zajmuje dużo, dużo dłużej niż zlokalizowanie, co nie jest idealne w tej sytuacji – icecreamhead

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

Eliminuje konieczność grep i head, ale nadal nie rozwiązuje problemu, czy wynik jest katalogiem.

Dlaczego nie można zrobić:

type -P bibtex 

które będą wyglądać w PATH dla programu o tej samej nazwie?

+0

typ -P bibtex działa idealnie ! – icecreamhead

2

Nie rozumiem dokładnie, więc może moje rozwiązanie jest błędne: dlaczego nie można używać which? Lub bibtex nie jest w ŚCIEŻKA?

Powiązane problemy