Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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
julien
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éplacer les fichiers d'un dossier dans un autre sur un autre disque.

Le problème 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éplacer, et
que comme si le dossier est vide, mv me retourné 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

ça allé très bien.... enfin, pas top tout de meme..... surtout que ça
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

Bonjour,


Il doit y avoir plus simple mais ceci fonctionne :
ls -l <chemin répertoire> | head -1 |cut -d" " -f2

Avatar
Nicolas George
condo4 wrote in message
:
Toujours dans mes scripts, j'aimerai tester si des fichier existe dans
un repertoire...


Tu peux faire un `find | head -n 2 | wc -l` ou équivalent.

mv /mnt/disquesource/in/* /mnt/disquedest/dest/


Avec zsh, tu peux faire ceci :

l=(/mnt/disquesource/in/*(N))
(( $#l > 0 )) && mv $l /mnt/disquedest/dest/

Avatar
Nicolas S.
Il doit y avoir plus simple mais ceci fonctionne :
ls -l <chemin répertoire> | head -1 |cut -d" " -f2


Ne fonctionnera pas avec des fichiers cachés.

--
Nicolas S.

Avatar
Ronald
Le Fri, 31 Aug 2007 07:11:45 -0700, condo4 a écrit :

Bonjour,

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



Est ce que ce sont des fichiers qui occupent de l'espace disque
normalement? Dans ce cas , si `du -s /mnt/disquesource/in/|cut -f1` est
supérieur à zéro, le répertoire n'est pas vide.

Avatar
Nicolas S.
Est ce que ce sont des fichiers qui occupent de l'espace disque
normalement? Dans ce cas , si `du -s /mnt/disquesource/in/|cut -f1` est
supérieur à zéro, le répertoire n'est pas vide.


Non, c'est faux. L'espace disque renvoyé par 'du' sur un répertoire vide
n'est pas zéro. Et tu ne traites pas correctement tous les cas de
figures, 'du' renvoi "0" pour les liens symboliques et les fichiers vides.

Mais surtout, tu négliges le temps nécessaire (et inutile) au parcours
de _toute_ l'arborescence du répertoire.

--
Nicolas S.

Avatar
Ronald
Le Fri, 31 Aug 2007 21:17:08 +0200, Nicolas S. a écrit :

Est ce que ce sont des fichiers qui occupent de l'espace disque
normalement? Dans ce cas , si `du -s /mnt/disquesource/in/|cut -f1` est
supérieur à zéro, le répertoire n'est pas vide.


Non, c'est faux. L'espace disque renvoyé par 'du' sur un répertoire vide
n'est pas zéro.


$ ls -a test/
. ..
$ du -s test/
0 test/

Et tu ne traites pas correctement tous les cas de
figures, 'du' renvoi "0" pour les liens symboliques et les fichiers vides.


Il me semblait pourtant avoir précisé.

Mais surtout, tu négliges le temps nécessaire (et inutile) au parcours
de _toute_ l'arborescence du répertoire.


Et donc ta solution?


Avatar
Nicolas George
Ronald wrote in message :
$ du -s test/
0 test/


Le résultat dépend du filesystem.

Et donc ta solution?


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

Avatar
Ronald
Le Fri, 31 Aug 2007 19:52:23 +0000, Nicolas George a écrit :

Ronald wrote in message :
$ du -s test/
0 test/


Le résultat dépend du filesystem.


ok.
xfs,jfs, tmpfs :0
ext2: 1

Et donc ta solution?


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.


Avatar
Nicolas George
Ronald wrote in message :
Pour moi oui, une solution même imparfaite mais qui peut fonctionner
est toujours préférable à aucune.


Non. S'il y a un risque de perte de données ou de trou de sécurité, une
solution imparfaite est pire que rien du tout.

Avatar
Ronald
Le Fri, 31 Aug 2007 20:25:58 +0000, Nicolas George a écrit :

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


Non. S'il y a un risque de perte de données ou de trou de sécurité, une
solution imparfaite est pire que rien du tout.


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


1 2 3