如何清理文件扩展名?

9 shell find rename

我有一个包含 .MP3 文件的目录,我想将其扩展名更改为 .mp3。什么是最简单的方法来做到这一点?我在想一些事情:

find /RootPath -type f -iname "*.mp3" -exec mv {} sed s/.*MP3/\1.mp3/ \; 
Run Code Online (Sandbox Code Playgroud)

……虽然我知道这不太对。:) 替换不正确,我不确定如何在 in 中使用 amvsed命令。-execfind

我需要一个 bash 脚本吗?

Ste*_*n D 12

这是在 Bash 中执行此操作的一种方法:

for i in *; do [ "${i/%MP3/mp3}" != "$i" ] && echo "$i" "${i/%MP3/mp3}"; done
Run Code Online (Sandbox Code Playgroud)

我在echo这里使用过,所以命令本身除了打印文件名对之外什么都不做。如果该列表代表您要进行的更改,那么您可以更改echo为类似的内容mv -i --,然后将移动您的文件(并在覆盖之前提示您)。

简要说明:

for通过每一个文件迭代匹配的*。然后,我们确定扩展名是否已经是小写的,如果是我们继续,如果不是,我们继续移动它(或回应它,视情况而定)。这使用 Bash 的内置字符串操作,您可以在这里阅读:http : //tldp.org/LDP/abs/html/string-manipulation.html


Gil*_*il' 7

在 zsh 中:

autoload zmv
zmv '(*).MP3' '$1.mp3'   # rename files in the current directory only
zmv '(**/)(*).MP3' '$1$2.mp3'  # rename files in subdirectories as well
Run Code Online (Sandbox Code Playgroud)

还要照顾.Mp3.mP3文件:

zmv '(**/)(*).(#i)mp3' '$1$2.mp3'
Run Code Online (Sandbox Code Playgroud)


Cal*_*leb 6

您可以使用rename命令(请注意有两个具有不同 API 的主要实现)。例如要将文件扩展名的大小写从上更改为下,请尝试以下操作:

这里有一些关于他如何从一个凌乱的 bash 脚本转移到这个简单的命令的教程,这些命令正是您的用例。

执行此操作的另一个奇特命令是pax. 如果您在 shell 中使用 ZSH,您也可以使用zmv.