通过 bash 命令更改的音频文件重命名

通过 bash 命令更改的音频文件重命名

今天我提交了一个 shell 命令对一些我根本不理解的音频文件产生意外结果的案例。

以下是事实:

  1. 我的操作系统是 ArchLinux,Windows 管理器是 Awesome,使用的终端是 Konsole。

  2. 有许多包含空格和/或特定字符的目录和文件,因为',{,[,?,!我想通过删除任何空格和/或特定字符来重命名它们。

  3. 在寻找 shell 命令时,我发现这个命令可以用 a 替换(例如)该_字符.

$ find ./ -type f -exec sed -i -e 's/_/./g' {} \;

  1. 我在许多目录上使用了这个命令,其中所有文件都已按预期重命名,我对此感到满意。

  1. 有一些目录包含一些我想要重命名的音频文件,我在这些目录上应用了这个 bash 命令。与以前的使用相反,该过程花费了更长的时间,并且最终的结果并不符合我的预期。首先,大多数文件尚未重命名。其次,所有音频文件(mp3、flac...)都已被更改/损坏,并且不再被任何音频文件读取器识别。相比之下,我没有使用 bash 命令的音频文件总是正确的并且可以读取。

例如,当我尝试使用 smplayer 读取已更改的文件之一时,错误消息为:MPlayer/mpv 已意外完成。退出代码:2。日志文件添加:“无法识别文件格式。”

参考第一个答案,我在下面提供有关更改效果的附加信息。

使用了 3 个命令来得到我想要的:

  • 查找 ./ -type f -exec sed -i -e 's/_/./g' {} \;

  • 查找 ./ -type f -exec sed -i -e 's/ /./g' {} \;

  • 查找 ./ -type f -exec sed -i -e 's/.././g' {} \;

以下是损坏之前>之后的一些文件名示例:

1_-_Bob_The_Sponge_-_Living under the Sea.flac > 1.-.Bob.The.Sponge.-. Living.under the Sea.flac(注意一些空格仍然存在)

2_-_Bob_The_Sponge_-_Nemo_my_friend.mp3 > 2.-.Bob_The.Sponge.-.Nemo my.friend.mp3(注意 1 个“_”尚未删除,名称中添加了 1 个空格)。

这里不能重现所有的情况,有些文件名已经改好了,有些是部分的,有些还是和以前一样。

更改后的文件的权重没有改变,这些文件的权限也没有改变。仅最后一次修改的日期发生了变化。

当然,我很想了解到底发生了什么。我尝试使用不同的浏览器查找解释,但没有发现任何类似或相近的问题。

所以,我的问题是:

  1. 为什么这个 bash 命令似乎改变了这些音频文件?
  2. 为什么该命令对这种类型的文件有效,而对其他类型的文件无效?
  3. 有什么解决方案可以扭转该命令对这些文件造成的损害?

答案1

您使用了以下命令

find ./ -type f -exec sed -i -e 's/_/./g' {} \;

这基本上是做什么的

sed -i -e 's/_/./g' filename

对于该find命令找到的每个文件。sed逐行浏览您的文件,然后使用s(替代)命令,将每个_文件替换为..由于您正在使用该-i标志,因此这种情况会内联发生。难怪你的文件被损坏了!

您将无法复制旧文件。你变了_而且..到了.。您所知道的是,.文件中的每个字符都可能是这些字符之一(或.)。

相关内容