I have a directory myDir
of many .html files. I am trying to create an array of all the files in the directory so I might be able to index the array and be able to refer to particular html files in the directory. I have tried the following line:
myFileNames=$(ls ~/myDir)
for file in $myFileNames;
#do something
but I want to be able to have a counter variable and have logic like the following:
while $counter>=0;
#do something to myFileNames[counter]
I am quite new to shell scripting and am unable to figure out how to achieve this hence would appreciate any help regarding this matter.
You can do:
# use nullglob in case there are no matching files
shopt -s nullglob
# create an array with all the filer/dir inside ~/myDir
arr=(~/myDir/*)
# iterate through array using a counter
for ((i=0; i<${#arr[@]}; i++)); do
#do something to each element of array
echo "${arr[$i]}"
done
You can also do this for iteration of array:
for f in "${arr[@]}"; do
echo "$f"
done
Your solution will work for generating the array. Instead of using a while loop, use a for loop:
#!/bin/bash
files=($( ls * )) #Add () to convert output to array
counter=0
for i in $files ; do
echo Next: $i
let counter=$counter+1
echo $counter
done
# create an array with all the filer/dir inside ~/myDir
arr=(~/myDir/*)
# iterate through array indexes to get 'counter'
for counter in ${!arr[*]}; do
echo $counter # show index
echo "${arr[counter]}" # show value
done
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With