从目录中的所有文件中删除特定扩展名

Dio*_*iva 19 shell rename files

我有几个带有“.old”扩展名的文件。
如何在不删除文件的情况下删除“.old”扩展名?

我可以手动完成,但需要做更多的工作:

mv file1.key.old file1.key
mv file2.pub.old file2.pub
mv file3.jpg.old file3.jpg
mv file4.jpg.old file4.jpg

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

该命令也适用于其他扩展吗?

例子:

mv file1.MOV.mov file1.MOV
mv file2.MOV.mov file2.MOV
mv file3.MOV.mov file3.MOV

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

或更好:

mv file1.MOV.mov file1.mov
mv file2.MOV.mov file2.mov
mv file3.MOV.mov file3.mov

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

jim*_*mij 25

使用bash 的参数替换机制去除匹配的后缀模式:

for file in *.old; do
    mv -- "$file" "${file%%.old}"
done
Run Code Online (Sandbox Code Playgroud)

  • 这:`对于 *.old 中的文件;do mv "$file" "${file%%.old}"; 完成`工作,谢谢 (2认同)

bds*_*dsl 6

您没有说明您使用的是什么操作系统,但许多 Linux 发行版都有一个rename您可以使用的命令。实际上有两个完全不同的rename命令——Debian 和类似的系统提供一个,而 RedHat 和类似的系统提供另一个——但任何一个都可以在这里工作。

Perl 基于renameDebian、Ubuntu 等,请参阅:prename 手册

renameRedhat 等上的Util-Linux ,请参阅:重命名手册

在 Debian 和类似系统上,您可以执行以下操作:

rename 's/\.old$//' *
Run Code Online (Sandbox Code Playgroud)

或者:

rename s/.MOV.mov/.mov/ *.*
Run Code Online (Sandbox Code Playgroud)

在 Redhat 和类似产品上,您可以执行以下操作:

rename .old "" *
Run Code Online (Sandbox Code Playgroud)