mercoledì 14 maggio 2008

Iterare su file con spazi in bash

Per iterare su un elenco di file, il modo più intuitivo è quello di usare il costrutto for della bash. Ad esempio se volessimo stampare a video tutti i file php nella cartella corrente potremmo usare:

for i in `find ./ -name "*.php"` ; do echo "PHP: $i" ; done

In realtà tale comando non si comporta come vorremmo se ci sono dei file contenenti uno spazio. Questo perchè il costrutto for si aspetta un elenco di stringhe separate dallo spazio. In alternativa al comando precende, si può sempre usare il seguente comando (anche se non ci sono spazi nei nomi dei file):

find ./ -name "*.php" | while read i; do echo "PHP: $i" ; done