2012-02-19 19 views
9

Ho uno script bash che è simile al seguente:ciclo bash attraverso tutti trovare ricorsivamente nelle sottodirectory

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

Ora ho bisogno di passare attraverso tutte le sottodirectory in public_html quindi dovrebbe funzionare su:

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

A cosa devo modificare FILES=public_html/*.php per farlo?

Inoltre ho bisogno di controllare per assicurarsi che ci sia almeno un file oppure esso stampa

Processing *.php file... 

risposta

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

IMPORTANTE: nota le virgolette singole intorno al *.php per prevenire l'espansione guscio della *.

+0

Restituisce solo i risultati del pwd. – qwertymk

+0

Non penso. (Usi la ricerca di GNU?) 'Mkdir -p public_html/{a, b, c}; tocca public_html/{a, b, c}/{1,2,3} .php; find public_html -type f -name * .php' restituisce tutti i 9 file. – sgibb

+0

Questo ha funzionato 'FILES =" $ (trova public_html -type f -name '* .php') "' – qwertymk

1
FILES=`find public_html -type d` 

$ FILES sarà ora una lista di ogni singola directory all'interno public_html.

+1

Penso che abbiate frainteso la domanda. Ho bisogno di ottenere i file all'interno della directory e non le directory stesse – qwertymk

+1

Vuoi ogni file php nelle sottodirectory di public_html? In tal caso puoi scrivere 'find public_html -name * .php' – Jarryd

Problemi correlati