Shell-Script
ID3tag - 從文件名中提取元數據的腳本
我有錄音目錄
foo - bar-202009.opus unix - tilde-2020se.opus stack - exchange-29328f.opus
我試圖從文件名設置元
foo - bar.202009.opus
(有一些不一致 - 所以簡單的方法就是報廢-<6digitchars>.opus
)song title = foo - bar
使用 sed 報廢,
$ ls | sed 's/-[a-zA-Z0-9]*\w//g; s/.opus//g' foo - bar unix - tilde stack - exchange
我用id3tag設置,synatx
id3tag --song=[tilte] [file]
我在目錄中有所有這些,所以使用 while & read 進行迭代,
ls | while read x; \ do id3tag \ $(echo \ --song=\"$(echo $x | sed 's/-[a-zA-Z0-9]*\w//g; s/.opus//g')\" \ \"${x}\" ); \ done
上面的問題是,輸入文件中的空格導致 id3 解釋為另一個文件(即使用 括起來
\"${x}\"
)所以現在輸出,
foo 'bar"' '"bar-202009.opus"' . .
i3dtag 有沒有辦法將帶有空格的文件視為單個文件。
避免
ls
解析,單行。#!/bin/sh for file in *; do scrap="$(echo $file | sed 's/-[a-zA-Z0-9]*\w//g; s/.opus//g')" id3tag --song="${scrap}" "${f}" done
我建議您不要嘗試將其設為單線:
ls | while read x; do x="$(echo $x | sed 's/-[a-zA-Z0-9]*\w//g; s/.opus//g')" id3tag --song="${x}" done
annahri 關於不解析
ls
輸出的觀點很好,所以你可以改為for x in *.opus; do .... the rest is the same
使用這種方法,子 shell 消耗引號或將引號作為文字傳遞給
id3tag
.