|
|
|
|
||||||
| fr.comp.os.unix Système UNIX. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
On 14 Apr 2006 06:24:52 -0700, octane@alinto.com 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 |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
octane@alinto.com :
> 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 |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
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 |
|
![]() |
| Outils de la discussion | |
|
|