如何更改目录中的文件扩展名

vis*_*hal 4 command-line scripts files rename batch-rename

我在具有扩展名的目录中有许多文件。

.text(2)
.text(1)
Run Code Online (Sandbox Code Playgroud)

我想从扩展中删除数字,输出应该像

.text 
.text
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我使用 shell 脚本吗?我正在使用 CentOs 6.3。

A.B*_*.B. 8

在保存文件的文件夹中启动单行或更改find命令的路径。在以下示例中find .,路径是.(点)。

测试:

find . -type f -print0 | xargs -I{} -0 rename -v -n  's/\([0-9]+\)$//' {}
Run Code Online (Sandbox Code Playgroud)

重命名为:

find . -type f -print0 | xargs -I{} -0 rename -v  's/\([0-9]+\)$//' {}
Run Code Online (Sandbox Code Playgroud)

该命令递归地查找所有文件并删除所有出现(<any_number>)在文件名末尾的 。

删除$in's/\([0-9]+\)$//'以删除文件名中某处的所有出现,例如:

find . -type f -print0 | xargs -I{} -0 rename -v  's/\([0-9]+\)//' {}
Run Code Online (Sandbox Code Playgroud)

例子:

% ls -oga
-rw-rw-r--  1 0 Jun 10 09:34 .foo(1)
-rw-rw-r--  1  0 Jun 10 09:34 .bar(2)
% find . -type f -print0 | xargs -I{} -0 rename -v  's/\([0-9]+\)$//' {}
% ls -aog
-rw-rw-r--  1    0 Jun 10 09:34 .foo
-rw-rw-r--  1    0 Jun 10 09:34 .bar
Run Code Online (Sandbox Code Playgroud)

  • 也许使用 `s/\([0-9]+\)$//` 只删除文件名末尾的括号。无论如何+1很好的解决方案 (2认同)
  • +1,无论如何只是`find 。-type f -print0 | xargs -0 rename -v 's/\([0-9]+\)$//'` 就可以了 (2认同)