使用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脚本进行文件名的批量修改操作。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/233625.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-11 17:10
下一篇 2024-12-11 17:11

相关推荐

  • Shell脚本与Python脚本的区别

    本文将从多个方面对Shell脚本与Python脚本的区别做详细的阐述。 一、语法差异 Shell脚本和Python脚本的语法存在明显差异。 Shell脚本是一种基于字符命令行的语言…

    编程 2025-04-29
  • Java批量执行SQL时Communications Link Failure Socket is Closed问题解决办法

    对于Java开发人员来说,批量执行SQL是一个经常会遇到的问题。但是,有时候我们会遇到“Communications link failure socket is closed”这…

    编程 2025-04-28
  • Shell嵌入式介绍及应用

    本文将介绍Shell嵌入式的概念、特点和应用,并针对嵌入式系统开发中的一些问题,给出相应的解决方案。 一、Shell嵌入式概念 Shell嵌入式是一种将Shell(命令行解释器)嵌…

    编程 2025-04-28
  • Python Shell保存PY文件的方法

    Python Shell是一种交互式编程环境,它能够快速验证代码实现。有时,为了将代码保存到文件中,我们需要了解如何在Python Shell中保存Python文件。本文将从多个方…

    编程 2025-04-27
  • PowerDesigner批量修改属性

    本文将教您如何使用PowerDesigner批量修改实体、关系等对象属性。 一、选择要修改的对象 首先需要打开PowerDesigner,并选择要修改属性的对象。可以通过以下两种方…

    编程 2025-04-27
  • Shell和Python哪个难学

    Python比Shell更难学习。 一、语法复杂度 Shell脚本是一种受众较为广泛的编程语言,它的语法相对于Python来说要简单很多,很多基本的语句都只需要几个字符就能表示出来…

    编程 2025-04-27
  • Python批量导入数据库

    本文将介绍Python中如何批量导入数据库。首先,对于数据分析和挖掘领域,数据库中批量导入数据是一个必不可少的过程。这种高效的导入方式可以极大地提高数据挖掘、机器学习等任务的效率。…

    编程 2025-04-27
  • 如何批量下载某博主全部微博相册

    这篇文章将教大家如何通过Python代码批量下载某博主全部微博相册。 一、获取微博相册链接 首先,我们需要获取到某博主的所有微博相册链接。可以通过以下代码获取到某博主的首页链接: …

    编程 2025-04-27
  • Python批量爬取网页内容

    Python是当前最流行的编程语言之一,其在数据处理、自动化任务、网络爬虫等场景下都有广泛应用。本文将介绍如何使用Python批量爬取网页内容,方便获取大量有用的数据。 一、安装所…

    编程 2025-04-27
  • Shell对比字符串

    本文将从多个方面介绍Shell对比字符串的方法和技巧。 一、基本操作 Shell的对比字符串操作主要使用test或者[ ]操作符,其中test是[ ]的等价形式。可以使用man t…

    编程 2025-04-27

发表回复

登录后才能评论