2016-11-06 85 views
1

我有一個名爲「01 - Welcome To The Jungle.mp3」的文件,我想要eyeD3 -t "Welcome To the Jungle" 01 - Welcome To The Jungle.mp3修改文件夾中所有文件的標籤。我從awk文件中提取:「歡迎來到叢林」:如何在bash命令行上使用awk的輸出

#!/bin/bash 
for i in *.mp3 
do 
eyeD3 -t $(echo ${i} | awk -F' - ' '{print $2}' | awk -F'.' '{print $1}') ${i} 
done 

它不起作用。整個「$(echo S {i} ....)」和「$ {i}」都不能用於替換各個文件的名稱。

回答

0

你需要仔細的報價可能會包含空格的變量,@heemayl已經指出。

另外,在本例中,代替使用awk, 這將是最好使用天然擊模式替換來提取的標題,例如:

for file in *.mp3; do 
    title=${file%.mp3} 
    title=${title#?????} 
    eyeD3 -t "$title" "$file" 
done 

即:

  • 在端
  • 除去.mp3除去前5個字符(計數前綴NN -
+1

非常感謝你@janos!我甚至不知道你能做到這一點!它看起來比awk命令更直觀! – JPJ

+0

不,謝謝。我想我現在明白了。 – JPJ

1

由於輸入文件名包含空格,因此您需要通過shell防止在IFS(默認值:空格,製表符,換行符)處進行分詞。典型的解決方法是在變量擴展周圍使用雙引號。

務必:

for i in *.mp3; do eyeD3 -t "$(echo "$i")" | ...; done 

您可以利用此字符串,<<<,避免echo -ing:

for i in *.mp3; do eyeD3 -t <<<"$i" | ...; done