如何使用shell脚本重命名文件夹中的所有文件?

时间:2014-06-07 12:07:41

标签: shell

我最近在笔记本电脑上播放了一些音乐mp3,但他们都是名字" songtitle.mp3.mp3"

有人知道如何删除所有文件的第二个.mp3吗?提前谢谢

4 个答案:

答案 0 :(得分:0)

您可以使用awk执行此操作并将结果传递到shell中:

ls | awk -F. '{print "mv "$0" "$1"."$3}' | sh

<强>提示: 如果你的文件名中没有.(在你的情况下在歌词中),那么这个解决方案才有效。

答案 1 :(得分:0)

由于这是一个与编程相关的Q&amp; A网站,简单地使用mmv是不可能的; - )

#!/bin/sh
for i in *.mp3.mp3; do
    j=`basename "$i" .mp3`
    mv "$i" "$j"
done

如果在SO上错误地询问了这个问题,那么这是手册页: http://manpages.ubuntu.com/manpages/gutsy/man1/mmv.1.html

答案 2 :(得分:0)

使用%形式的参数扩展。

for f in *.mp3.mp3; do
    mv "$f" "${f%.mp3}"
done

您可以在bash手册页的参数扩展部分找到相关文档。

答案 3 :(得分:0)

bash解决方案,例如来自chepner的解决方案应该可以解决问题。

我想提一下在这里使用sed的可能性,以及执行替换结果的e命令(谨慎使用:首先尝试不使用e命令在行的末尾打印将要执行的内容。)

这会使:

ls -1 *.mp3.mp3 | sed 's/\(.+\.mp3\)\.mp3$/mv & \1/e'

它应列出当前目录中以.mp3.mp3结尾的所有文件,例如:toto.mp3.mp3。字符串toto.mp3.mp3通过管道传输到sed,代替mv toto.mp3.mp3 toto.mp3,打印并执行它。