J'énumère les fichiers d'un répertoire et les parcoure en boucle, MAIS j'ai besoin de savoir combien il y en a aussi. $ {# dirlist [@]} est toujours 1, mais pour les boucles fonctionne?
#!/bin/bash
prefix="xxx"; # as example
len=${#prefix}; # string length
dirlist=`ls ${prefix}*.text`;
qty=${#dirlist[@]}; # sizeof array is always 1
for filelist in $dirlist
do
substring="${filelist:$len:-5}";
echo "${substring}/${qty}";
done
J'ai des fichiers xxx001.text jusqu'à xxx013.text
mais tout ce que je reçois est 001/1 002/1 003/1
dirlist=`ls ${prefix}*.text`
ne crée pas de tableau, il crée uniquement une chaîne avec des noms de fichiers séparés par des espaces.
tu dois faire
dirlist=(`ls ${prefix}*.text`)
pour en faire un tableau.
Ensuite, $ dirlist ne référencera que le premier élément, vous devez utiliser
${dirlist[*]}
pour tous les référencer dans la boucle.
Vous ne créez pas de tableau sauf si vous l'entourez de (
)
:
dirlist=(`ls ${prefix}*.text`)
dir=/tmp
file_count=`ls -B "$dir" | wc -l`
echo File count: $file_count
arr=(~/myDir/*)
for ((i=0; i<${#arr[@]}; i++)); do
#do something to each element of array
echo "${arr[$i]}"
done