我有一个名为“01 - Welcome to The Jungle.mp3”的文件,我想eyeD3 -t "Welcome To the Jungle" 01 - Welcome To The Jungle.mp3
来修改文件夹中所有文件的标记。我用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 :(得分:1)
您需要通过shell防止total_time
(默认:空格,制表符,换行符)上的单词拆分,因为您的输入文件名包含空格。典型的解决方法是在变量扩展周围使用双引号。
执行:
IFS
您可以利用此处字符串for i in *.mp3; do eyeD3 -t "$(echo "$i")" | ...; done
来避免<<<
:
echo
答案 1 :(得分:0)
你需要对可能包含空格的变量进行双引号,如@heemayl已经指出的那样。
此外,在此示例中,不使用awk
,
最好使用本机Bash模式替换来提取标题,例如:
for file in *.mp3; do
title=${file%.mp3}
title=${title#?????}
eyeD3 -t "$title" "$file"
done
那是:
.mp3
NN -
)