Tìm tập lệnh với các nhánh cắt sớm trong lần xuất hiện đầu tiên


1

Nó phải tồn tại, vấn đề của tôi là làm thế nào để thể hiện nhu cầu của mình. Khi tôi tìm kiếm một tên tệp đã cho, Iwant tìm kiếm dừng tìm kiếm nhánh hiện tại khi nó tìm thấy lần xuất hiện đầu tiên, NHƯNG tiếp tục tìm kiếm trong các nhánh khác.

Đây là một ví dụ. Đây là thư mục hiện tại của tôi:

dir1/Makefile
dir2/
dir3/Makefile
dir3/dira/Makefile
dir4/dirb/Makefile

Kết quả tôi muốn với find Makefile Là:

dir1/Makefile
dir3/Makefile
dir4/dirb/Makefile

Tôi không bận tâm sử dụng ngôn ngữ script nào, nhưng tôi thích một chức năng hiện có trong ngôn ngữ script thay vì triển khai ngôn ngữ script của riêng tôi.

Câu trả lời:


2

Vì tôi thực sự không thể tìm thấy bất cứ thứ gì, tôi đã tự làm (bằng python)

#!/usr/bin/python

import os

def findInSubdirectory(filename, path):
    for root, dirs, names in os.walk(path, topdown=True):
        if filename in names:
            print os.path.join(root, filename)
            del dirs[:]

findInSubdirectory('Makefile', os.getcwd())

0

Bạn có thể sử dụng lệnh find như thế này:

$ find . -type d -exec test -e {}/Makefile \; -print -prune

Chi tiết:

$ find .                            # find starting in the current directory \
       -type d                      # only look at directories \
       -exec test -e {}/Makefile \; # test if Makefile exists in the directory \
       -print                       # print the directory name and path \
       -prune                       # stop searching once we find a Makefile

(không chắc chắn nếu điều này thực sự sẽ chạy với các bình luận / tiếp tục dòng ...)

Điều tốt nhất là vì nó được tìm thấy, bạn có thể làm những điều thông minh hơn là chỉ in tên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.