You may be tempted to use (*)
but what if a directory contains the *
character? It's very difficult to handle special characters in filenames correctly.
You can use ls -ls
. However, it fails to handle newline characters.
# Store la -ls as an array
readarray -t files <<< $(ls -ls)
for (( i=1; i<${#files[@]}; i++ ))
{
# Convert current line to an array
line=(${files[$i]})
# Get the filename, joining it together any spaces
fileName=${line[@]:9}
echo $fileName
}
If all you want is the file name, then just use ls
:
for fileName in $(ls); do
echo $fileName
done
See this article or this this post for more information about some of the difficulties of dealing with special characters in file names.