2012-05-07 19 views
5

Tôi đang cố gắng sử dụng grep để tự động định vị chương trình bibtex trong thư mục bin của người dùng.Làm cách nào để buộc grep chỉ trả về các tệp và bỏ qua các thư mục?

Vấn đề là, nó thường trả về một thư mục có tên bibtex, có nghĩa là tập lệnh không tự động chạy lệnh.

Làm cách nào để buộc grep (hoặc thực sự là lệnh định vị) tự động bỏ qua các thư mục?

EDIT: Lệnh hiện nay là: locate bibtex | grep "/bibtex$" -d skip | head -n1

Trả lời

1

Sigh, không phải của tôi sạch nhất, nhưng nó hoạt động. perl -ne 'chomp($f=$_);print if !-d $f'

mà làm cho lệnh của bạn locate bibtex | perl -ne 'chomp($f=$_);print if !-d $f' | grep "/bibtex$" -d skip | head -n1

+0

'-d skip' không thực hiện hành động nào ở đây vì đầu vào' grep' là 'stdin'. Bạn có thể rút ngắn lệnh của bạn thành 'perl -ne 'chomp; in nếu! -d'' –

+0

Đó là lần chạy đầu tiên của tôi, nhưng tôi không chắc chắn nếu dòng nguồn cấp dữ liệu còn thiếu sẽ gây ra vấn đề sau đó xuống chuỗi ống. Tôi đoán tôi là Nelly Nervous theo cách đó. –

+0

Nhân tiện, bạn có thể rút ngắn chữ đó thành 'perl -lne 'nếu! -d'' (chomp dường như không cần thiết, nếu nó là' perl -lne' chomp; in nếu! -d ' '). –

12

Lệnh find?

find /bin -name bibtex -type f 

Tìm tên tệp "bibtex" thuộc loại "f", là tệp thông thường.

+1

icecreamhead, chấp nhận câu trả lời này ngay lập tức, khi tìm kiếm của bạn kết thúc :-) –

+0

Câu trả lời này thực sự hiệu quả, nhưng mất nhiều thời gian hơn rất nhiều so với định vị không lý tưởng trong trường hợp này – icecreamhead

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

Loại bỏ nhu cầu cho grephead, nhưng vẫn không giải quyết được vấn đề kết quả là thư mục hay không.

Tại sao bạn không làm:

type -P bibtex 

mà sẽ tìm trong các PATH cho một chương trình theo tên đó?

+0

loại -P bibtex hoạt động hoàn hảo ! – icecreamhead

2

Tôi không hiểu chính xác như vậy có lẽ giải pháp của tôi là sai: tại sao bạn không sử dụng which? Hoặc bibtex không nằm trong số PATH?