GNU/Linux >> Tutoriels Linux >  >> Linux

Comment savoir s'il y a des fichiers dans un dossier et quitter en conséquence (en KSH)

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.


Linux
  1. Linux - Comment savoir s'il y a des fichiers dans un dossier et quitter en conséquence (en Ksh) ?

  2. Comment rechercher et supprimer des répertoires et des fichiers vides sous Unix

  3. Comment modifier les autorisations d'un dossier et de ses sous-dossiers/fichiers en une seule étape ?

  4. Comment détecter et découvrir qu'un programme est dans l'impasse ?

  5. Comment chmod et chown fichiers cachés sous Linux?

Comment trouver une chaîne ou un mot spécifique dans les fichiers et les répertoires

Comment utiliser sed pour rechercher et remplacer une chaîne dans des fichiers

Comment rechercher et supprimer des fichiers en double sous Linux

Rechercher et supprimer le fichier le plus ancien s'il y a plus de X fichiers dans un répertoire sous Linux

Comment trouver des fichiers en double sous Linux et les supprimer

Comment puis-je trouver des fichiers et calculer leur taille ?