BASH:循环 ls

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'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

相关内容