Bash

BASH:通過 ls 循環

  • March 14, 2015

我在使用這段程式碼時遇到了問題:

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

引用自:https://unix.stackexchange.com/questions/190116