savoir si un repertoire contient au moins un fichier (ksh, sun)
4 réponses
octane
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 (?)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Stephane Chazelas
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
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).
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
lhabert
:
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
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
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
lhabert
:
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
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
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
Stephane Chazelas
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
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).
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).