Shell脚本:检查该文件是否为文件而不是目录

时间:2011-01-26 11:52:14

标签: bash file shell directory

我正在开发一个小的可爱shell脚本来遍历特定文件夹,只输出其中的文件,不包括任何最终目录。不幸的是,我无法使用find,因为我需要访问文件名变量。

这是我当前的代码段,不起作用:

for filename in "/var/myfolder/*"
do
  if [ -f "$filename" ]; then
    echo $filename # Is file!
  fi

done;

我做错了什么?

5 个答案:

答案 0 :(得分:4)

您不能转义/ var / myfolder / *,这意味着您必须删除双引号,以便shell将表达式正确扩展为所需的文件名列表。

答案 1 :(得分:2)

你做错了是不使用find。可以使用{}检索文件名。

find /var/myfolder -maxdepth 1 -type f -exec echo {} \;

答案 2 :(得分:1)

尝试在/ var / myfolder / *周围没有双引号(原因是通过使用双引号,您使所有文件成为单个字符串而不是每个文件名为单独的字符串

答案 3 :(得分:1)

for filename in "/var/myfolder/*"

引号意味着你从那个glob中得到一个巨大的字符串 - 在echo _ $filename _之前紧跟一个if,发现它只通过'loop'一次,而不是是有用的。

删除引号,然后重试:)

答案 4 :(得分:-1)

您可以使用find并避免所有这些麻烦。

for i in $(find /var/myfolder -type f)
do
echo $(basename $i)
done

这不是你想要处理的情况吗?如果要限制深度,请使用-maxdepth选项进行查找。