2010-04-13 5 views
4

J'ai un répertoire avec des sauvegardes complètes svn nommés comme ceci:Comment puis-je vérifier si le fichier existe à l'aide de modèles?

name1.20100412.r9.bz2 
name1.20100413.r10.bz2 
name2.20100411.r101.bz2 
name3.20100412.r102.bz2 
... 

Je dois vérifier si un fichier de sauvegarde existe en utilisant le nom et le numéro de révision ne. J'ai essayé test mais cela n'a pas fonctionné:

if [ -e name1.*.r9.bz2 ]; then echo exists; fi 
[: too many arguments 

Comment puis-je tester si le fichier existe?

+0

Que dit 'echo name1. *. R9.bz2'? Il semble que vous ayez plus d'une sauvegarde de révision 9 là-bas! – Jens

+0

Les bonnes réponses ici: http://stackoverflow.com/questions/6363441/check-if-a-file-exists-with-wildcard-in-shell-script. Manière la plus simple: utilisez 'ls'. Meilleure façon: utilisez 'find'. – jrouquie

Répondre

-1

Vérifiez simplement si le shell a étendu le motif.
Si le motif ne peut correspondre à un seul fichier (par exemple, il n'y a qu'un seul fichier de sauvegarde pour chaque révision), vous pouvez utiliser:

if [ name1.*.r9.bz2 != "name1.*.r9.bz2" ]; then 
    echo exists 
fi 

Si le motif peut correspondre à plusieurs fichiers:

if [ "$(echo name1.*.r9.bz2)" != "name1.*.r9.bz2" ]; then 
    echo exists 
fi 
0

Essayez quelque chose comme

FILES=(`ls name1.*.r9.bz2`) 
if [ ${#FILES[@]} -gt 0 ]; then 
    echo "Files!" 
else 
    echo "No Files" 
fi 
+0

'sh' n'a pas de tableaux. –

+0

Produit des messages laids sur stderr lorsque les fichiers n'existent pas. – Jens

4

Vous pouvez faire:

shopt -s nullglob 
set -- name1.*.r9.bz2 
if [ -n "$1" ]; then echo exists; fi 

ou

pattern="name1.*.r9.bz2" 
if [ "$(echo $pattern)" != "$pattern" ]; then echo exists; fi 

Edit: Ajouté shopt -s nullglob.

2

Une légère variation sur la réponse de eugene y:

test "$(echo name1.*.r9.bz2)" != "name1.*.r9.bz2" && echo exists 
2

J'utiliserais:

if ls name1.*.r9.bz2 &> /dev/null ; then 
    echo exists 
fi