您的位置:

使用shell批量修改文件名

一、基本概念

在shell中使用mv命令可以用来对单个文件进行修改操作,但是当我们需要批量对文件进行修改时就需要使用循环结构和正则表达式等来实现。在这里我们先来介绍一下基本的概念及命令。

1. mv命令

mv [option] source_file target_file

该命令用来修改文件名或文件所在路径,其中option可以包括四个参数,分别为-i, -f, -u和-t。-i表示交互式,-f表示不提示直接覆盖,-u表示只有源文件比目标文件新或目标文件不存在时才会修改,-t表示指定目标文件夹。

2. for循环

for var in $list    #注意空格
do
    command   #在此处执行指定操作
done

for循环常用来对列表中的每个元素进行操作,其中var为变量名,$list表示需要操作的列表,command表示需要执行的操作。

3. 正则表达式

正则表达式是一种用来匹配文本的表达式,它包含了特定的字符和文本结构,常用的有^, $, ., *, [], {}等符号。例如 ^ 和 $ 用来匹配字符串的起始和结束位置,. 表示任意一个字符,* 表示匹配前面的字符 0 次或多次,[] 表示匹配括号中的任意一个字符,{} 表示匹配前面的字符固定次数。

二、批量修改文件名的常用方法

1. 根据文件名中的某些字符进行修改

对于需要根据文件名中的某些字符进行修改的情况,我们可以使用for循环和正则表达式来实现:

#!/bin/bash
for file in *.txt
do
    mv $file ${file/txt/md}   #把txt替换为md
done

上述代码表示将当前文件夹中所有txt文件的后缀名修改为md。

2. 在文件名中添加字符

有时我们需要在文件名中添加一些特定的字符,例如在文件名前后添加字符串或者添加日期信息:

#!/bin/bash
for file in *.txt
do
    mv $file $(date +%Y%m%d)_$file   #在文件名前面添加当前日期
done

上述代码表示将当前文件夹下所有txt文件的文件名前面添加当前日期。

3. 数字序列或随机数

有时我们需要给文件名添加数字序列或者随机数,这时我们可以使用seq或者$RANDOM变量实现:

#!/bin/bash
num=0
for file in *.png
do
    num=$(($num+1))
    mv $file image_${num}.png   #给文件名添加数字序列
done

上述代码表示将当前文件夹下所有png文件的文件名修改为image_1.png, image_2.png等。

#!/bin/bash
for file in *.png
do
    mv $file image_${RANDOM}.png   #给文件名添加随机数
done

上述代码表示将当前文件夹下所有png文件的文件名修改为image_4235.png, image_213.png等随机数。

三、实用技巧

1. 去除文件名中的特定字符

有时我们需要去除文件名中的某些字符,例如特定的前缀或后缀:

#!/bin/bash
for file in *-user.txt
do
    mv $file ${file/-user/}   #去除特定的后缀
done

上述代码表示将当前文件夹下所有以-user结尾的文件名中的-user去掉。

2. 批量修改文件夹中的文件名

有时我们需要对某个文件夹中的文件名进行批量修改,这时我们只需要在mv命令中加上目标的文件夹路径:

#!/bin/bash
for file in ~/Documents/*.doc
do
    mv $file ~/Documents/new_files/${file##*/}   #修改文件夹路径并保留原文件名
done

上述代码表示将Documents文件夹下所有doc文件的文件名移到Documents/new_files文件夹下。

3. 对子文件夹中的文件进行批量修改

有时我们需要对某个文件夹中的子文件夹中的所有文件进行修改操作,这时我们可以使用递归结构来实现:

#!/bin/bash
function renameFiles() {
    for file in $1/*   #递归读取子文件夹
    do
        if [ -d "$file" ]; then   #判断是否为目录
            renameFiles "$file"
        else
            mv "$file" "${file/mp4/flv}"   #修改文件名
        fi
    done
}
renameFiles ~/Movies   #从Movies文件夹开始递归

上述代码表示将Movies文件夹及其子文件夹下所有mp4文件的文件名修改为flv。

四、总结

批量修改文件名在我们日常的工作中经常使用,使用shell脚本可以高效地实现这些操作。本文针对常见的批量操作情形进行了详细的介绍,并给出了对应的代码示例。通过学习本文,你可以更加熟练地运用shell脚本进行文件名的批量修改操作。

使用shell批量修改文件名

2023-05-20
linux批量修改文件名

2023-05-13
Linux批量修改文件名称详解

2023-05-18
使用Shell脚本进行多文件批量处理

2023-05-13
使用sh脚本命令批量修改文件名

2023-05-13
使用shell字符串数组实现快速批量替换和重命名文件

2023-05-13
用python批量修改图片名称(python图片批量重命名)

2022-11-10
使用python批量重命名文件的简单介绍

2022-11-19
如何使用Linux批量修改文件名中的指定内容

2023-05-17
使用Shell脚本批量备份数据库

2023-05-12
批量修改文件格式

2023-05-21
如何运用sh for循环快速批量处理文件

一、for循环简介 Shell是一种用于交互式命令行操作的程序语言,可以方便地调用各种Linux系统自带的工具和命令。而for循环是其中一个十分常用的流程控制结构,在批量处理文件时发挥着重要作用。 f

2023-12-08
cad批量改块属性,批量修改块属性

2022-12-02
js批量修改css,js批量修改样式

本文目录一览: 1、js修改样式css有哪些方法呢? 2、如何用js修改已加载的多个css样式表样式 3、js中巧用cssText属性批量操作样式 4、JS修改CSS设置的样式 5、JS 动态修改CS

2023-12-08
Python的os.rename:批量修改文件名变得轻松

2023-05-12
Shell循环:实现批量操作

2023-05-13
SQL批量修改详解

2023-05-17
Excel批量修改完整指南

2023-05-20
使用Shell for循环进行批量操作的实用技巧

2023-05-12
python批量修改寄存器的值(python 批量更改文件名

2022-11-08