Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

bash script, create array of all files in a directory

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.

like image 350
anonuser0428 Avatar asked Feb 10 '14 03:02

anonuser0428


3 Answers

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
like image 171
anubhava Avatar answered Nov 20 '22 12:11

anubhava


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
like image 27
Paul Hicks Avatar answered Nov 20 '22 13:11

Paul Hicks


# 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
like image 1
Ivan Avatar answered Nov 20 '22 12:11

Ivan