OVH Cloud OVH Cloud

Script test si le repertoire est vide

25 réponses
Avatar
condo4
Bonjour,

Toujours dans mes scripts, j'aimerai tester si des fichier existe dans
un repertoire...

En gros, j'ai une tache cron qui se lance regulierement, et qui viens
d=E9placer les fichiers d'un dossier dans un autre sur un autre disque.

Le probl=E8me c'est que cette autre disque ne servant pas souvent, je le
met ne veille (hdparm) au bout de 20min....

Comme mon script se lance meme quand y'a pas de fichier a d=E9placer, et
que comme si le dossier est vide, mv me retourn=E9 une erreur, j'ai fait
la magouille suivante :

#!/bin/sh
touch /mnt/disquesource/in/notempty
mv /mnt/disquesource/in/* /mnt/disquedest/dest/
rm /mnt/disquedest/dest/notempty

=E7a all=E9 tr=E8s bien.... enfin, pas top tout de meme..... surtout que =
=E7a
a la facheuse tendance a sortir mon disque de l'etat de veille meme si
il n'y a pas de fichier a copier dessus....

Donc, j'aimerai faire un test pour voir si il existe ou pas des
fichier dans le dossier et quitter le script avant de faire le move.

je pense que c'est avec "test " mais je ne suis pas trop famillier
avec les script shell :-) alors si vous pouviez m'eclairer....


@+Fab

Merci

10 réponses

1 2 3
Avatar
Arol
Le Fri, 31 Aug 2007 22:41:14 +0200, Ronald a écrit:

Sérieusement, tu en connais beaucoup des solutions parfaites, en pratique?


Dans l'absolu ?
Non.

Dans ce cas particulier ?
Oui.

Avatar
Ronald
Le Fri, 31 Aug 2007 20:47:46 +0000, Arol a écrit :

Le Fri, 31 Aug 2007 22:41:14 +0200, Ronald a écrit:

Sérieusement, tu en connais beaucoup des solutions parfaites, en pratique?


Dans l'absolu ?
Non.


Ah? Pourquoi ça m'inquiète un peu?

Dans ce cas particulier ?
Oui.


Et comme tu es super sympa, tu vas la garder pour toi?


Avatar
Nicolas S.
Et donc ta solution?




Ma solution est la même que Nicolas.

Il n'est pas nécessaire d'avoir soi-même une solution pour dire qu'une autre
solution est mauvaise.


Pour moi oui, une solution même imparfaite mais qui peut fonctionner
est toujours préférable à aucune.


Ta solution "imparfaite mais qui peut fonctionner" n'est pas préférable
à "aucune", puisqu'il en existe une autre.
Celle de Nicolas est meilleure et je t'ai déjà expliqué pourquoi.

L'erreur sur le type du système de fichiers m'incombe. Ceci dit, la
solution déjà donnée par Nicolas ne dépend pas du filesystem. Tu veux
vraiment compter les points?

--
Nicolas S.



Avatar
Nicolas S.
Dans ce cas particulier ?
Oui.


Et comme tu es super sympa, tu vas la garder pour toi?


La réponse qui ne dépend pas du filesystem et qui n'oblige à parcourir
toute une arborescence a déjà été donnée. Tu veux quoi de plus?

--
Nicolas S.


Avatar
Ronald
Le Fri, 31 Aug 2007 23:20:09 +0200, Nicolas S. a écrit :

Dans ce cas particulier ?
Oui.


Et comme tu es super sympa, tu vas la garder pour toi?


La réponse qui ne dépend pas du filesystem et qui n'oblige à parcourir
toute une arborescence a déjà été donnée. Tu veux quoi de plus?


msgid? Parce que je ne trouve pas.

Une solution avec find, qui parcours l'arborescence?
Une autre avec zsh, imparfaite car ne fonctionne qu'avec zsh
Encore une qui ne fonctionne pas avec les fichier cachés
Et celle que j'ai donné.

ALORS?



Avatar
Nicolas George
Ronald wrote in message :
Une solution avec find, qui parcours l'arborescence?


Non, elle ne parcourt pas l'arborescence.

Avatar
Nicolas S.

msgid? Parce que je ne trouve pas.

Une solution avec find, qui parcours l'arborescence?


Perdu.

--
Nicolas S.

Avatar
Ronald
Le Fri, 31 Aug 2007 21:31:40 +0000, Nicolas George a écrit :

Ronald wrote in message :
Une solution avec find, qui parcours l'arborescence?


Non, elle ne parcourt pas l'arborescence.


J'ai vu. C'est la solution parfaite?


Avatar
Ronald
Le Fri, 31 Aug 2007 23:35:28 +0200, Nicolas S. a écrit :


msgid? Parce que je ne trouve pas.

Une solution avec find, qui parcours l'arborescence?


Perdu.


Mais non, gagné.


Avatar
Luc.Habert.00__arjf
condo4 :

Toujours dans mes scripts, j'aimerai tester si des fichier existe dans
un repertoire...


Quelque chose comme ça :

FILE_FOUND for f in "$DIR"/* "$DIR"/..?* "$DIR"/.[!.]*; do
if test -e "$f"; then
FILE_FOUND=t
break
fi
done

if test -z "$FILE_FOUND"; then
# $DIR est vide
else
# $DIR n'est pas vide
fi


. En shell sh, les motifs qui ne matchent rien s'expansent en eux même, et
non en du vide comme on pourrait le penser intuitivement, donc si le
répertoire est vide, le corps de la boucle va quand même être exécuté trois
fois, et il faut alors tester si le $f correspond vraiment à un nom de
fichier.

Les trois motifs différents, c'est parce que le premier n'attrape pas les
noms de fichiers commençant par un « . », et les deux suivants servent à
attraper tous ceux qui commencent par un « . », sauf « . » et « .. ». (En
shell, dans un motif en « [] », la négation est un « ! » et non un « ^ »
comme dans les expressions régulières, la plupart des shells supportent
aussi le « ^ », mais pas tous, je l'ai appris à mes dépens il y a quelques
mois, et c'est justement à cette occasion que j'ai découvert cette
grotesquerie.)

1 2 3