技术介绍
在Linux系统中,我们可以使用命令行工具来批量删除文件的后缀名,这里我们主要使用两个命令:rename
和 for
,我们需要安装这两个工具,在Debian/Ubuntu系统中,可以使用以下命令安装:
sudo apt-get install rename
在CentOS/RHEL系统中,可以使用以下命令安装:
sudo yum install rename
接下来,我们将详细介绍如何使用这两个工具来批量删除文件的后缀名。
使用rename命令
1、创建一个文本文件,例如file_list.txt
,在其中列出需要修改后缀名的文件名,每个文件名占一行。
file1.txt file2.txt file3.jpg file4.docx
2、使用rename
命令,结合正则表达式来匹配并修改文件名,在本例中,我们将匹配所有没有.
的文件名,并在其末尾添加.bak
后缀,运行以下命令:
cat file_list.txt | rename 's/\.[^.]*$//' | xargs -I {} touch {}.bak
解析:
cat file_list.txt
:读取file_list.txt
中的文件名列表。
rename 's/\.[^.]*$//'
:使用正则表达式替换,将没有.
的文件名替换为原文件名。
xargs -I {} touch {}.bak
:使用xargs
命令,为每个文件创建一个新的.bak
后缀的文件。
使用for循环和shell脚本
1、创建一个名为batch_rename.sh
的shell脚本,并在其中编写以下内容:
!/bin/bash for file in *; do if [[ ! $file =~ \.[^\.]+$ ]]; then mv "$file" "${file}.bak" fi done
2、为脚本添加可执行权限:
chmod +x batch_rename.sh
3、在包含需要修改后缀名的文件的目录下运行脚本:
./batch_rename.sh
相关问题与解答
1、如何只删除特定类型的文件后缀?只删除.log
类型的文件后缀?可以将正则表达式修改为.*\.log$
,即只匹配以.log
结尾的文件名,代码如下:
cat file_list.txt | rename 's/\.[^.]*\.log$//' | xargs -I {} touch {}.bak
2、如何批量重命名多个目录下的文件?可以将脚本放到一个循环中,遍历所有需要修改后缀名的目录。
!/bin/bash dirs=(dir1 dir2 dir3) 需要修改后缀名的目录列表 for dir in "${dirs[@]}"; do for file in "$dir"/*; do if [[ ! $file =~ \.[^.]+$ ]]; then mv "$file" "${file}.bak" fi done done
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/135054.html