2013-01-23 15 views
5

sto usando il comando find nel mio script bash in questo modoUsando find in script bash - come gestire casi in cui trovare i rendimenti "file o la directory non esiste"

for x in `find ${1} .....`; 
do 
    ... 
done 

Tuttavia, come faccio a gestire il caso in cui l'input per il mio script è un file/directory che non esiste? (cioè voglio stampare un messaggio quando succede)

Ho provato a usare -d e -f, ma il caso che sto avendo problemi è quando $ {1} è "." o ".."

Quando l'ingresso è qualcosa che non esiste, non entra nel mio ciclo for.

Grazie!

+0

Se si deve usare 'find nomefile', è possibile confrontare la stato di uscita cioè 'se [$? ! = 0]; allora ... ' –

+0

Provato il tuo suggerimento Usman e non ha funzionato. Penso che lo stato esistente sia ancora 0 se non riesce a trovare nulla? – Ken

risposta

0

Lo script di Bash è un po 'strano. Pratica prima dell'implementazione. Ma lo this site sembra abbinarlo bene.

Se il file esiste, questo funziona:

if [ -e "${1}" ] 
then 
    echo "${1} file exists." 
fi 

Se il file non esiste, questo funziona. Notare la '!' per denotare "non":

if [ ! -e "${1}" ] 
then 
    echo "${1} file doesn't exist." 
fi 
+0

Mi dispiace che avrei dovuto dire che il caso che sto avendo problemi è quando $ {1} è "." o ".." - le opzioni -f, -d e -e in bash non funzionano bene con "." o ".." – Ken

+1

Non importa, provalo di nuovo .. -f e -d non rappresentano "." e ".." ma -e sì! – Ken

+0

Contento di essere stato in grado di aiutare! – JakeGould

0

assegnare il risultato a una variabile e verificare la variabile.

files=`find ${1} .....` 
if [[ "$files" != “file or directory does not exist” ]]; then 
    ... 
fi 
+0

Come sopra, il caso che ho riscontrato è quando $ {1} è "." o ".." - le opzioni -f, -d e -e in bash non funzionano bene con "." o ".." – Ken

2

Bash questo dà fuori dalla scatola:

if [ ! -f ${1} ]; 
then 
    echo "File/Directory does not exist!" 
else 
    # execute your find... 
fi 
0

Si può provare qualcosa di simile:

y=`find . -name "${1}"` 
if [ "$y" != "" ]; then 
    for x in $y; do 
    echo "found $x" 
    done 
else 
    echo "No files/directories found!" 
fi 
Problemi correlati