linux批量去掉文件后缀名

技术介绍

在Linux系统中,我们可以使用命令行工具来批量删除文件的后缀名,这里我们主要使用两个命令:renamefor,我们需要安装这两个工具,在Debian/Ubuntu系统中,可以使用以下命令安装:

sudo apt-get install rename

在CentOS/RHEL系统中,可以使用以下命令安装:

linux批量去掉文件后缀名

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/\.[^.]*$//':使用正则表达式替换,将没有.的文件名替换为原文件名。

linux批量去掉文件后缀名

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

(0)
K-seoK-seoSEO优化员
上一篇 2023年12月16日 17:39
下一篇 2023年12月16日 17:42

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入