1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #!/bin/bash
function listDir
{
# record current dir contents
lineList=$(ls -l $dir | awk '
BEGIN {OFS="/"}
NR > 1 \
{
if (substr($1, 1, 1) == "d") {print "d", $NF}
else {print $5, $NF}
}')
local d f
local -a dirArray fileArray
for line in $lineList
do
if [[ ${line%/*} == d ]]
then
dirArray[d++]="${line#*/}"
else
fileArray[f++]="${line%/*}/$dir/${line#*/}"
fi
done
# display current dir name and recursively call function
for dirItem in ${dirArray[*]}
do
dir="$dir/$dirItem"
echo $dir
listDir "$dir"
dir="${dir%/*}"
done
# sort and display files in current dir
echo "${fileArray[*]}" | tr ' ' $'\n' | sort -t "/" -n -k 1,1
}
dir=$1
listDir $dir |
Partager