Question Script aléatoire utilisant bash


J'essaie d'écrire un script aléatoire bash, mais j'ai des problèmes. Dans un répertoire "quotations", il y a des fichiers auxquels j'aimerais accéder de manière aléatoire, mais chaque fois que je l'essaie, j'obtiens l'erreur suivante:

cat: '/home/thomas/Store/quotations/.': Is a directory

Voici le script:

#!/bin/bash
targetDir="/home/thomas/Store/quotations/"
files=( "$targetDir"/.* )
index="$RANDOM"
while [ "$index" -ge ${#files[@]} ]; do
    index=${RANDOM:4:4}
done
cat "${files[$index]}"

J'apprécierais de l'aide.

Merci !


0
2017-12-09 16:43


origine




Réponses:


Il y a deux répertoires spéciaux dans chaque répertoire correspondant à votre caractère générique: . et ... Etes-vous sûr de ne pas vouloir "$targetDir"/* au lieu? De toute façon, vous devez filtrer les répertoires.

Vous pouvez utiliser

[[ -d $filename ]]

pour tester si le nom de fichier est un répertoire.

Vous pouvez également utiliser la méthode habituelle pour transformer $ RANDOM en un nombre compris entre 0 et $ n.

index=$(( RANDOM % (n + 1) ))

où% est l'opérateur de module.

En d'autres termes:

#!/bin/bash
targetDir=/home/thomas/Store/quotations
files=( "$targetDir"/* )
index=$(( RANDOM % ${#files[@]} ))
until [[ -f ${files[index]} ]] ; do 
    index=$(( RANDOM % ${#files[@]} ))
done
cat "${files[index]}"

2
2017-12-09 17:05



Merci, cela fonctionne parfaitement maintenant! Je suppose que je dois m'entraîner plus :) - Thomas