我想通過bash腳本遍歷指定擴展名列表的文件。我試着在Matching files with various extensions using for loop給出的解決方案,但它不按預期工作。給出的解決方案是:在bash中循環遍歷指定擴展名的文件
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
,看看是否是這個問題。這沒有幫助,所以我想知道爲什麼我得到這些意想不到的結果。給定的解決方案是錯誤的還是 bash shell與*NIX
版本不同?有沒有其他方法可以完成同樣的事情,在OS X
bash shell中可能會更好?
嗨。你能否更詳細地解釋你想要做什麼?由於代碼被破壞,很難使用*作爲你想要的描述。 – jpaugh