我有一个文件目录,我需要标准化这些文件的名称。像audio_32.mp4.mp4这样的文件名,我想改成audio_0-32.mp4。也就是说,我想在下划线后面加上一个零,然后再加上一个连字符。文件名中的数字不同。也就是说,还有一个名为audio_33.mp4.mp4的文件等等。我希望所有其他文件和模式保持不变。如果将去除尾部.mp4和添加零作为单独的任务来处理,则是可以的。我如何才能有效地做到这一点?
audio_32.mp4.mp4
audio_0-32.mp4
audio_33.mp4.mp4
.mp4
7tofc5zh1#
在纯bash中执行此操作:
for f in *.mp4; do t="${f%.mp4}" echo mv "$f" "${t/_/_0-}" done
对输出结果满意后,删除mv之前的echo以重命名文件,而不是打印mv命令。
mv
echo
1rhkuytd2#
您的代码将在哪个操作系统上运行?已经有很多工具可以处理这类问题,所以您在这里进入了重新发明轮子的领域。例如Powertoys PowerRename就是为此而设计的。也就是说,如果我假设典型的GNU工具集是可用的,你可以用“basename”来去掉mp4:
[user@host]$ basename audio_33.mp4.mp4 .mp4 audio_33.mp4 [user@host]$
剩下的可以通过基本的字符串操作来完成:
[user@host]$ X=audio_33.mp4 [user@host]$ echo ${X/audio_/audio_0-} audio_0-33.mp4 [user@host]$
2条答案
按热度按时间7tofc5zh1#
在纯bash中执行此操作:
对输出结果满意后,删除
mv
之前的echo
以重命名文件,而不是打印mv
命令。1rhkuytd2#
您的代码将在哪个操作系统上运行?已经有很多工具可以处理这类问题,所以您在这里进入了重新发明轮子的领域。
例如Powertoys PowerRename就是为此而设计的。
也就是说,如果我假设典型的GNU工具集是可用的,你可以用“basename”来去掉mp4:
剩下的可以通过基本的字符串操作来完成: