如何更改文件后缀

如何更改文件后缀

在包含多个子文件夹和文件的目录结构中,有些文件名带有后缀_create(例如java1_create),有些文件名带有_bakjava2_bak)。

我只需将后缀_create为 的文件重命名_bak,以便所有文件都应具有后缀_bak

有任何命令或脚本可以执行此操作吗?

答案1

在 Linux 上,假设您的文件名_create中没有任何文件名(仅在末尾),您可以使用renameutil-linux 软件包中的实用程序,该软件包安装在所有非嵌入式 Linux 系统上。调用find以递归方式对子目录中的所有文件执行该命令。

find -depth -exec rename _create _bak {} +

在 Debian 和派生发行版(Ubuntu、Mint 等)上,将 Perl 脚本作为 提供rename,可以调用rename.ul而不是rename,或者替换rename _create _bakrename 's/_create$/_bak/'

答案2

这可能就是您所追求的:

for file in $(find . -name "*_create"); do mv -i $file ${file%%_create}_bak; done

在实际文件上使用它之前,请务必对其进行测试。

答案3

在 Debian、Ubuntu 及其衍生产品上,使用 Perl rename,有时安装为prename

#enable ** globbing
shopt -s globstar 
#use the rename utility
rename -n 's/_create$/_bak/' **_create 

如果它按预期工作,请删除-n(= ) 标志。--no-act


笔记:

这可能是执行此操作的最短有效的方法,特别是如果您已经shotp -s globstar使用(我的~/.bashrc)。

但是,您可以获得:

-bash: /usr/bin/rename: Argument list too long

如果**_create扩展超过getconf ARG_MAX字符长度(在我的 Linux 机器上为 2097152)。

如果是这种情况,您需要使用find -print0with xargs -0(请参阅lcd047 的回答)。

相关内容