迭代for循环,如何确保它忽略输出目录?
for filename in /home/user/*
do
echo $filename
done;
答案 0 :(得分:7)
for filename in /home/user/*
do
if [ ! -d "$filename" ]; then
echo $filename
fi
done
或者,使用find
命令:
find /home/user ! -type d -maxdepth 1
答案 1 :(得分:4)
与我的previous answer一样,您确实想要使用find
。您正在尝试使用7-10行编写脚本:
find /home/user -type f -printf "%f\n"
答案 2 :(得分:2)
您可以使用-d
运算符来检查$filename
是否引用目录:
for filename in /home/user/*
do
if [ ! -d "${filename}" ]
then
echo $filename
fi
done;
有关详细信息和其他可用的运营商,请参阅test manpage。
您还可以使用find command:
find /home/user -not -type d -maxdepth 1
答案 3 :(得分:1)
find命令更适合你想要的。
find /home/user -type f
答案 4 :(得分:0)
while IFS='$\n' read -r filename
do echo "$filename"
done < <(find /home/user/ -type f -maxdepth 1)
答案 5 :(得分:0)
您可以在循环内使用条件语句。像这样(未经测试):
if [ ! -d "$filename" ]
then
// do stuff
fi
-d
如果是目录,则为真,并且与!
相反。如果它确实存在并且不是目录,它将会成功。