遍历普通目录(适用于文件/目录名中不含空格):
for file in `ls -A /tmp/test/samples`
do
echo $file
done
对于文件/目录名中含空格的情况,上面方法无法正常遍历,如下图目录的文件列表:
使用上面的方法遍历结果,截图如下:
很明显遍历的结果是不正确的,原因是因为shell中的分隔符默认是空格或制表符,由环境变量IFS指定。解决方法有两种
第一种是更改IFS变量,以换号符作为for循环的分隔符:
oldIFS=$IFS
IFS=$'\n'
for file in `ls -A /tmp/test/samples`
do
echo $file
done
IFS=$oldIFS
结果截图:
第二种方法,是利用逗号分隔文件/目录,再使用字符串截取,来达到正确遍历
str=`ls -A -m /tmp/test/samples`
str=${str},
while [ ! -z "$str" ]
do
file=${str%%,*}
if [ ! -z "$file" ]; then
echo $file
fi
str=${str#*,}
done
结果截图如下: