2012-02-19 7 views
9

Tengo un script bash que tiene el siguiente aspecto:bucle de fiesta a través de todo el hallazgo de forma recursiva en subdirectorios

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

Ahora lo necesito para ir a través de todos los subdirectorios en public_html por lo que debe ejecutarse en:

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

¿Qué cambio FILES=public_html/*.php para hacer eso?

También tengo que comprobar para asegurarse de que hay por lo menos un archivo o bien se imprime

Processing *.php file... 

Respuesta

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

IMPORTANTE: Nota las comillas simples alrededor del *.php para prevenir el desarrollo del forro de la *.

+0

. Solo devuelve resultados de la pwd. – qwertymk

+0

No lo creo. (¿Estás utilizando GNU's find?) 'Mkdir -p public_html/{a, b, c}; toque public_html/{a, b, c}/{1,2,3} .php; find public_html -type f -name * .php' devuelve los 9 archivos. – sgibb

+0

Esto funcionó 'FILES =" $ (find public_html -type f -name '* .php') "' – qwertymk

1
FILES=`find public_html -type d` 

$ ARCHIVOS será ahora una lista de todos los directorios única dentro de public_html.

+1

Creo que malinterpretaste la pregunta. Necesito obtener los archivos dentro del directorio y no los directorios en sí – qwertymk

+1

¿Desea que cada archivo php en los subdirectorios de public_html? En ese caso, puede escribir 'find public_html -name * .php' – Jarryd

Cuestiones relacionadas