2011-12-22 35 views
5

Tôi có cây thư mục như:Cách tìm thư mục lồng nhau?

dir11/dir21/dir31......./dirn1 
dir12/dir22/dir32......./dirn2 
dir13/dir23/dir33......./dirn3 

Độ sâu khác nhau. Liệu nó có thể tìm thấy tất cả các đường dẫn trên đó tồn tại thư mục với tập tin x.txt có chiều dài> 0? Có thể cần sử dụng script bash không? Cảm ơn.

Trả lời

1

Bạn khá nhiều cần điều đó, vâng ...

for dir in $(find /the/root/dir -type d); do 
    if [ ! -f "$dir/x.txt" ]; then 
     continue 
    fi 
    size=$(stat -c %s "$dir/x.txt") 
    if [ "$size" != "0" ]; then 
     echo $dir 
    fi 
done 
8

Tôi tin rằng GNU find có thể phù hợp với tất cả các tiêu chí của bạn bằng cách riêng của mình:

$ find /top/dir -not -empty -type f -name x.txt -printf '%h\n' 

Trên đây đệ quy tìm kiếm /top/dir cho những người không có sản phẩm nào (-not -empty), thường xuyên (-type f) tệp có tên x.txt và in các thư mục dẫn đến các tệp này (-printf '%h\n').

+1

cũng printf '\ n'! – Benoit

+0

@Benoit, bạn hoàn toàn đúng. Trả lời cố định, cảm ơn cho người đứng đầu :) –

+0

Hmmwait, đối với tôi OP muốn tìm _directories_ trong đó có tệp như vậy, tìm tệp, chứ không phải thư mục – fge

3

Có lẽ với tìm thấy bạn có thể sử dụng:

find /top/dir -type f -name x.txt -size +1b -printf '%h\n' 
Các vấn đề liên quan