2011-01-26 85 views
1

我目前正在研究一个小巧可爱的shell脚本来循环访问特定文件夹,只输出其中的文件,不包括任何最终的目录。不幸的是,我不能使用find,因为我需要访问文件名变量。Shell脚本:检查该文件是否为文件而不是目录

这是我目前的片段,这是不行的:

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

done; 

我在做什么错?

回答

4

你不可以逃避的/ var/MyFolder中/ *,这意味着,你必须删除双引号为了表达由外壳正确扩展到文件名的所需列表。

1

尝试不使用双引号的/ var/MyFolder中/ *(原因是在于,通过把双引号你在做的所有文件一个字符串,而不是每个文件名的独立字符串

+0

不,所有的文件都是*不是*一个字符串。这是使星号文字,它不会扩大全局。 – 2011-01-26 16:35:32

+0

你是对的,它是一个字面星号,然后在“echo $ filename”中进行扩展。 – vmpstr 2011-01-28 12:22:02

1

for filename in "/var/myfolder/*"

引号意味着你得到一个巨大的来自该glob的字符串 - 在之前紧邻发现它只经过'循环'一次,用一些没用的东西。

删除引号,然后再试一次:)

+0

它不是引号内的glob。星号是文字。 – 2011-01-26 16:36:05

2

你在做什么错了没有使用find。文件名可以通过使用{}来检索。

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

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

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

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

相关问题