Pour faire suite au commentaire de Stéphane Chazelas à la réponse de Kusalananda :
$ ksh
$ echo ${.sh.version}
Version AJM 93u+ 2012-08-01
$ ls
TABLE1.csv TABLE2.csv
Utilisez un tableau pour contenir les fichiers. Commencez avec une expression glob qui correspond à certains fichiers :
$ typeset -a files
$ files=( ~(N)*.csv )
$ echo "${#files[@]}"
2
$ typeset -p files
typeset -a files=(TABLE1.csv TABLE2.csv)
Maintenant, un glob "nu" qui ne correspond pas pour démontrer qu'un glob non correspondant est remplacé par le modèle glob sous forme de chaîne :
$ files=( *.txt )
$ echo "${#files[@]}"
1
$ typeset -p files
typeset -a files=('*.txt')
Maintenant avec le préfixe "null glob"
$ files=( ~(N)*.txt )
$ echo "${#files[@]}"
0
$ typeset -p files
(empty output)
$
Consultez la section Génération de nom de fichier de votre page de manuel ksh.
Pour répondre précisément à votre question :
typeset -a contents=( ~(N)"$gp_path"/ALLSTUFF*.zip )
if [[ ${#contents[@]} -eq 0 ]]; then
print 'EMPTY'
exit 0
else
print 'NOT EMPTY'
fi
Vous devriez perdre l'habitude d'utiliser des noms de variables en MAJUSCULES.
Voir aussi :https://mywiki.wooledge.org/ParsingLs
Vous pouvez faire disparaître le message d'erreur avec 2>/dev/null
à l'intérieur du ls
.
Vous pouvez ensuite vérifier si $CONTENTS
est vide avec -z
CONTENTS=$(ls -d -- "${gp_path}ALLSTUFF"*.zip 2>/dev/null)
if [ -z "$CONTENTS" ]; then
print 'EMPTY'
exit 0
else
print 'NOT EMPTY'
fi
Pour détecter si un modèle de nom de fichier se développe en quoi que ce soit, vous pouvez utiliser
set -- "$gp_path"ALLSTUFF*.zip
if [ -e "$1" ]; then
echo matched something
else
echo did not match anything
exit 1
fi
Le set
La commande définit les paramètres de position sur les noms de fichiers correspondant au modèle, et si le premier nom de fichier correspondant existe, alors il correspond à quelque chose. Le modèle reste non développé s'il ne correspond à rien.
Cela serait utilisable en ksh
, bash
et tout autre sh
-comme une coquille.