Newsgroup: it.comp.os.linux.software
Titolo: Test esistenza files con bash

Ho un semplice script bash che deve verificare l'esistenza di uno o più 
file con una certa estensione ed effettuare un'operazione se questi 
files esistono.
Lo script è il seguente:
#!/bin/sh -x
if [ -e *.prova ]; then
	for foo in *.prova; do mv $foo $foo.bak; done
fi
In pratica se nella directory corrente c'è qualche file con estensione 
.prova deve essere rinominato come .prova.bak
Il problema è che se nella directory sono presenti più files con 
estensione .prova il test non funziona, generando l'errore:
+ '[' -e test2.prova test.prova ']'
./pippo: [: test2.prova: binary operator expected
Qualcuno mi illumina su come poter fare? Grazie.

 Qualcuno mi illumina su come poter fare? Grazie.
usa prima il for, poi il test :
for foo in *.prova; do
  if [ -e $foo ] ; then
	mv $foo $foo.bak
  fi
done
ciao
--
Ranger!

 done
Grande, perfetto! Grazie.

 
Si lo è. Il motivo per cui lo faccio è che non voglio messaggi d'errore 
(tipo il mv che non trova file) in quanto è uno script schedulato con 
cron che altrimenti mi manderebbe una mail ogni 10 minuti. Se l'output è 
"vuoto" allora cron non notifica nulla, altrimenti in caso di un 
qualunque errore mi arriva la notifica via mail.


mv $foo $foo.bak 2> /dev/null
Si chiama redirezione dello standard error.
-- 
echo 15225453802040233345540387594P | dc

 Si chiama redirezione dello standard error.
Annoto. Grazie.

 Luca
Ah scusa, non avevo inteso il tuo intervento. E' vero, hai ragione.
E' che ero partito in un modo, e ragionavo ancora secondo quello...

 writes:

e' perche' "prova.*" viene espanso dalla shell prima di eseguire
if [ -e ... .  prova con:
if ls *.prova >/dev/null 2>$1
then for foo in *.prova; do mv $foo $foo.bak; done
else echo "Nessun file .prova"
fi
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg

 if ls *.prova >/dev/null 2>$1
scusa la domanda... ma 2>$1 non redirige lo standard error al primo
argomento dello script?
forse intendevi 2>&1?
VinX

bla, senza nessun ritegno, ha osato dire  (11/30/2005 01:55 PM):

si, ma il test non serve in ogni caso.
Se non vuoi messaggi mail da crontab fai una cosa cosi':
# aggiusta l'orologio ad ore prestabilite
0 0,4,8,12,16,20 * * * /usr/sbin/ntpdate 
tempo.ien.it
 >/dev/null 2>&1

 forse intendevi 2>&1?
si.  mea culpa, non l'avevo provato...


 
In questo modo però non gli viene inviato nessun tipo di errore che
potrebbe avvenire durante l'esecuzione di mv (tipo i/o error, file
system is read-only, ...)
 Ciriciao
  Gio'
-- 
/*
 * Solutions for New Business - 
http://www.snb.it
 */

   Gio'
 
 mv $foo $foo.bak 2> /tmp/error.log
 
Dipende da cosa si vuole fare, nel nostro caso non voleva 
esplicitamente avere warning.
-- 
echo 15225453802040233345540387594P | dc

   Gio'
 mv $foo $foo.bak 2> /tmp/error.log
-- 
echo 15225453802040233345540387594P | dc

J.Garcia ha scritto:


Questa e' la forma che adotto anch'io nei miei script.
Direttamente a /dev/null, se qualcosa va storto 
non sai dove mettere mano.
Ciao J. 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it