Bash
BASH:通過 ls 循環
我在使用這段程式碼時遇到了問題:
22 for filename in "$( ls "$1" | grep ".*\.flac$" )"; do 23 file_path="$1${filename}" 24 ffmpeg -i "${file_path}" -f ffmetadata $HOME/metadata
我收到以下錯誤消息,而不是每次迭代的元數據文件:
下載/Ariel Pink 的鬧鬼塗鴉 - 磨損的副本 (2005)/01 Trepanated Earth.flac … 17 Jagged Carnival Tours.flac:文件名太長
因此,在循環內部,$filename 變數似乎等於所有 FLAC 文件的名稱集中在一起。
當然,在第 22 行省略引號會導致空格問題。
我該如何進行這項工作?我是 bash 新手,非常困惑。
怎麼樣
for filepath in "$1/"*.flac do ffmpeg -i "${file_path}" -f ...
在哪裡
"$1/"*.flac
最後會保證.flac後綴- 一定要報價
"${file_path}"
- 可以使用找到基本名稱
bn=$(basename "${file_path}")
- 可以使用以下方式找到未標記的基本名稱
bnnf=$(basename "${file_path}" .flac)
樣本
A > ls -l Music total 0 -rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 foo bar -rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 foo bar.flac -rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 fubar -rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 fubar.flac
現在執行:
A > for f in Music/*.flac; do echo $f; ls -l "$f" ; done Music/foo bar.flac -rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 Music/foo bar.flac Music/fubar.flac -rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 Music/fubar.flac