2012-02-19 53 views
9

Tôi có một kịch bản bash trông giống như sau:bash lặp qua tất cả tìm đệ quy trong thư mục con

#!/bin/bash 
FILES=public_html/*.php # */ stupid syntax highlighter! 
for f in $FILES 
do 
    echo "Processing $f file..." 
    # take action on each file. 
done 

Bây giờ tôi cần nó để đi qua tất cả các thư mục con trong public_html vì vậy nó phải chạy trên:

/public_html/index.php 
/public_html/forums/status.php 
/public_html/really/deep/file/in/many/sub/dirs/here.php 

Tôi phải làm gì để thay đổi FILES=public_html/*.php để làm điều đó?

Ngoài ra tôi cần phải kiểm tra để đảm bảo rằng có ít nhất một tệp hoặc nếu không nó sẽ in

Processing *.php file... 

Trả lời

26
FILES=$(find public_html -type f -name '*.php') 

QUAN TRỌNG: Lưu ý các dấu nháy đơn xung quanh *.php để ngăn chặn sự bành trướng của vỏ *.

+0

Nó chỉ trả lại kết quả từ pwd. – qwertymk

+0

Tôi không nghĩ vậy. (Bạn có sử dụng tìm GNU không?) 'Mkdir -p public_html/{a, b, c}; chạm vào public_html/{a, b, c}/{1,2,3} .php; tìm public_html -type f -name * .php' trả về tất cả 9 tệp. – sgibb

+0

Điều này làm việc 'FILES =" $ (tìm public_html -type f -name '* .php') "' – qwertymk

1
FILES=`find public_html -type d` 

$ FILES bây giờ sẽ có một danh sách của tất cả các thư mục duy nhất bên trong public_html.

+1

Tôi nghĩ bạn đã hiểu nhầm câu hỏi. Tôi cần để có được các tập tin bên trong thư mục và không phải là các thư mục mình – qwertymk

+1

Bạn muốn mọi tập tin php trong các thư mục con của public_html? Trong trường hợp đó, bạn có thể viết 'tìm public_html -name * .php' – Jarryd

Các vấn đề liên quan