Produit du jour : Savoir se défendre sans avocat à partir de 4.00 € (Logiciel)
14/04/2006 15:24 par octane | 4 réponse(s) | Signaler un contenu abusif ou erroné
Bonjour

un script verifie la presence au minimum d'un fichier dans
un repertoire pour action.

Le script fourni contient:
if [ -f import/* ]
then
action
else
autre action
fi

Or, cela ne marche pas si le premier resultat renvoye par
l'expansion de * est un repertoire.

Je ne dois pas verifier l'existence de fichier dans des
sous-repertoires.

Je pensais verifier par un find du genre:
find import/ -type f -depth 1
mais je bute sur
-depth qui n'a pas l'effet esompte
-et la maniere d'encapsuler le find dans un test

Mais peut etre qu'il y a une solution simple a cote de
laquelle je suis passe (?)

Une idee?

Cordialement
mots-clés : savoir, repertoire, contient, fichier Catégories : OS Alternatif, Unix

Résultats similaires

Pour aller plus loin, d'autres discussions similaires sont disponibles :

BAZAR DE GRUMLOT (Pas Glop-Pas Glop)

Ave, pécésards, celui qui va discourir vous salue. J'ai préféré grouper les commandes, alors voici le sommaire : Problème #1 : suite à un plantage, références croisées, noms de fichiers invalides Problème #2 : suite à un ...

BAZAR DE GRUMLOT (Pas Glop-Pas Glop) [plus propret, suivi approp rié]

[Je recommence en commandes séparées, et avec suivi -- me semble-t-il -- approprié sur fr.comp.os.ms.windows...] [Le codage Unicode semble requis pour afficher les caractères bizarroïdes.] Ave, pécésards, celui qui va ...
Plus de résultats
 

Réponses

On 14 Apr 2006 06:24:52 -0700, wrote:
Bonjour

un script verifie la presence au minimum d'un fichier dans
un repertoire pour action.

Le script fourni contient:
if [ -f import/* ]
then
action
else
autre action
fi

Or, cela ne marche pas si le premier resultat renvoye par
l'expansion de * est un repertoire.

Je ne dois pas verifier l'existence de fichier dans des
sous-repertoires.

Je pensais verifier par un find du genre:
find import/ -type f -depth 1
mais je bute sur
-depth qui n'a pas l'effet esompte
[...]


l'effet esompté apres avoir lu la page de manuel?


-et la maniere d'encapsuler le find dans un test
[...]


has_file() { # args: <dir>
for f in "$dir"/* "$dir"/.*; do
[ -f "$f" ] && return 0
done
return 1
}

if has_file import; then
echo import has file'(s)'
fi

Ou

if find import/. \! -name . -prune -type f -print |
grep -q .; then
echo import had 'file(s)'
fi

Note que "[ -f" trouve les fichiers reguliers et les liens
symboliques vers les fichiers reguliers, "-type f" trouve les
fichiers reguliers uniquement. Tu peux avoir des resultats
inattendus si "[" ou "find" ne sont pas capable d'identifier le
type d'un fichier (par exemple pour des histoires de
permissions).

--
Stephane

:

Le script fourni contient:
if [ -f import/* ]
then
action
else
autre action
fi

Or, cela ne marche pas si le premier resultat renvoye par
l'expansion de * est un repertoire.


« -e » au lieu de « -f ». Mais je ne suis pas persuadé que ça soit garanti
de marcher, le test pourrait très bien raler que tu lui passes trop
d'arguments. Et en plus, tu ne vas pas récupérer les fichiers commençant par
« . ». Une solution serait plutôt :

PLOUM for f in import/* import/.[^.] import/.??*; do
if test -e "$f"; then PLOUM=t; break; done
done

if [ "$PLOUM" = t ]; then
action
else
autre action
fi

:

Le script fourni contient:
if [ -f import/* ]
then
action
else
autre action
fi

Or, cela ne marche pas si le premier resultat renvoye par
l'expansion de * est un repertoire.


« -e » au lieu de « -f ». Mais je ne suis pas persuadé que ça soit garanti
de marcher, le test pourrait très bien raler que tu lui passes trop
d'arguments. Et en plus, tu ne vas pas récupérer les fichiers commençant par
« . ». Une solution serait plutôt :

PLOUM for f in import/* import/.[^.] import/.?*; do
if test -e "$f"; then PLOUM=t; break; done
done

if [ "$PLOUM" = t ]; then
action
else
autre action
fi

2006-04-14, 13:56(+00), Stephane Chazelas:
[...]
has_file() { # args: <dir>
for f in "$dir"/* "$dir"/.*; do


for f in "$1"/* "$1"/.*; do


sorry

[ -f "$f" ] && return 0
done
return 1
}

if has_file import; then
echo import has file'(s)'
fi

Ou

if find import/. \! -name . -prune -type f -print |
grep -q .; then
echo import had 'file(s)'
fi

Note que "[ -f" trouve les fichiers reguliers et les liens
symboliques vers les fichiers reguliers, "-type f" trouve les
fichiers reguliers uniquement. Tu peux avoir des resultats
inattendus si "[" ou "find" ne sont pas capable d'identifier le
type d'un fichier (par exemple pour des histoires de
permissions).




--
Stéphane


Pour répondre ou poser vos questions, vous devez vous inscrire sur le site.
Vous aurez alors également accès à des fonctionnalités supplémentaires. S'inscrire...