对于目录中的文件,忽略文件夹

时间:2012-01-25 22:38:43

标签: bash shell

迭代for循环,如何确保它忽略输出目录?

for filename in /home/user/*
do
  echo $filename
done;

6 个答案:

答案 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如果是目录,则为真,并且与!相反。如果它确实存在并且不是目录,它将会成功。