我在这段代码中遇到了问题:
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's Haunted Graffiti - Worn Copy (2005)/01 Trepanated Earth.flac...17 铁血嘉年华之旅.flac:文件名太长
因此,循环内部的 $filename 变量似乎等于所有 FLAC 文件集中在一起的名称。
当然,在第 22 行省略引号会导致空格问题。
我该如何进行这项工作?我是 bash 的新手,很困惑。
答案1
怎么样
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