【发布时间】:2014-03-19 02:48:53
【问题描述】:
我正在尝试使用 bash 脚本遍历指定扩展名列表的文件。我尝试了Matching files with various extensions using for loop 给出的解决方案,但它没有按预期工作。给出的解决方案是:
for file in "${arg}"/*.{txt,h,py}; do
这是我的版本:
for f in "${arg}"/*.{epub,mobi,chm,rtf,lit,djvu}
do
echo "$f"
done
当我在一个包含epub 文件的目录中运行它时,我得到:
/*.epub
/*.mobi
/*.chm
/*.rtf
/*.lit
/*.djvu
所以我尝试更改for 声明:
for f in "${arg}"*.{epub,mobi,chm,rtf,lit,djvu}
然后我得到:
089281098X.epub
*.mobi
*.chm
*.rtf
*.lit
*.djvu
我也得到相同的结果:
for f in *.{epub,mobi,chm,rtf,lit,djvu}
所以看来"${arg}" 参数是不必要的。
虽然这些语句中的任何一个都能找到指定扩展名的文件并将它们传递给程序,但我从未解析的*. 文件名中得到读取错误。
我在OS X Mountain Lion 上运行这个。我知道默认的 bash shell 已经过时,所以我使用homebrew 将它从3.2.48 升级到4.2.45,看看这是否是问题所在。这没有帮助,所以我想知道为什么我会得到这些意想不到的结果。给定的解决方案是错误的还是OS X bash shell 与*NIX 版本有某种不同?是否有另一种方法可以在OS X bash shell 中完成同样的事情?
【问题讨论】:
-
嗨。你能更详细地解释你想要做什么吗?由于代码已损坏,因此很难使用 that 作为您想要的描述。