重命名以“-”开头的mp3文件

重命名以“-”开头的mp3文件

我从我的 iPod 中提取了歌曲,但这样做时,每首歌曲都被重命名为“- [歌曲的原始名称]”。我想编写一个 bash 脚本来删除第一个“-”,因为其中可能有 1000 首歌曲,而我无法手动重命名它们。我尝试使用 mv 和重命名来完成此操作,但由于特殊字符而无法工作。我在互联网上查了一下,找到了一个解决方案,即用“”替换“-”,但问题是我只想删除第一个“-”,而不是我歌曲中可能出现的其他潜在的“-”姓名。我希望我说得足够清楚,有人可以帮助我吗?

这是我的原始脚本:

#!/bin/bash
for f in *; do
  echo "${f}";
  if [[ ${f:0:1} == "-" ]]; then
    echo "renaming ${f}";   
    rename.ul ${f} ${f:1} *.mp3;
fi
done

答案1

for f in -*.mp3; do
  echo mv -- "$f" "${f:1}"
done

当您确定它执行您想要的操作时,请删除echo.

--需要使用双破折号 ( ) 来阻止将文件名中的mv解释-为选项。对于文件名包含空格的情况,需要引用变量。

答案2

当您将一个以破折号开头的参数传递给命令时,并且您不希望该参数被解释为选项,请--首先将(双破折号)作为参数传递。对于几乎所有命令,--都意味着“此后没有更多选项”。

rename.ul -- '-' '' -*

另一种可能性是安排参数不以破折号开头。这并不总是可能的,但对于文件名来说,它是:添加./在前面。

rename.ul ./- ./ ./-*

请注意,您不需要循环 - rename对文件列表作为参数感到满意。此外,您不需要传递整个文件名,只需传递要重命名的部分即可。 (事实上​​,脚本的问题之一是您将内容混合在一起,将整个文件名作为字符串传递以进行替换,然后每次传递所有文件的列表。)

总是在变量替换两边加上双引号,否则您的脚本将无法处理包含空格的文件名。

相关内容