我正在开发一个小的可爱shell脚本来遍历特定文件夹,只输出其中的文件,不包括任何最终目录。不幸的是,我无法使用find
,因为我需要访问文件名变量。
这是我当前的代码段,不起作用:
for filename in "/var/myfolder/*"
do
if [ -f "$filename" ]; then
echo $filename # Is file!
fi
done;
我做错了什么?
答案 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
选项进行查找。