Linux 下批量重命名文件的技巧

1. 批量重命名文件的常见需求

在 Linux 系统中,有时我们会面临需要批量重命名文件的情况。可能是因为文件名不符合命名规范,需要统一修改;也可能是需要对一系列文件按照特定的规则进行重新命名。无论是哪种情况,都可以通过一些技巧和命令来批量重命名文件。

1.1. 案例一:文件名统一修改

假设有一个文件夹包含了很多照片文件(.jpg)和视频文件(.mp4),它们的文件名格式并不统一,需要将它们的文件名修改为统一的规则。

1.2. 案例二:按照特定规则进行重命名

假设有一个文件夹包含了一系列报告文件(.txt),它们的文件名格式为 "报告-日期-序号.txt",现在需要将这些文件按照日期排序并重新命名为 "序号-日期.txt" 的格式。

2. Linux 下批量重命名文件的技巧

2.1. 使用 mv 命令

在 Linux 中,mv 命令用于移动文件或者重命名文件。通过 mv 命令,可以实现对单个文件的重命名。但如果要批量重命名文件,可以通过结合 mv 命令和通配符来实现。

# 案例一:将所有的 .jpg 文件重命名为统一的文件名格式

$ mv *.jpg new_name.jpg

# 案例二:按照日期重新命名报告文件

$ for file in 报告-*.txt

> do

> # 提取序号和日期

> index=$(echo $file | awk -F "-" '{print $3}')

> date=$(echo $file | awk -F "-" '{print $2}')

>

> # 按照规定格式重命名文件

> new_name="${index}-${date}.txt"

> mv "$file" "$new_name"

> done

以上命令中,通配符 "*" 表示匹配任意文件名。在第一个案例中,通过将所有的 .jpg 文件都重命名为 new_name.jpg,实现了文件名的统一。而在第二个案例中,通过 for 循环遍历所有的 "报告-*.txt" 文件,使用 awk 命令提取出序号和日期,并按照指定格式进行重命名。

2.2. 使用 rename 命令

在某些 Linux 发行版中,可能会有 rename 命令,它可以方便地对文件进行重命名。通过使用正则表达式,我们可以对文件名进行灵活的修改。

# 案例一:将所有的 .jpg 文件重命名为统一的文件名格式

$ rename 's/.jpg$/new_name.jpg/' *.jpg

# 案例二:按照日期重新命名报告文件

$ rename 's/报告-(\d+)-(\d+)/$2-$1/' 报告-*.txt

以上代码中,rename 命令后面的 ’s/匹配规则/替换规则/’ 是使用正则表达式来进行匹配和替换的。在第一个案例中,使用正则表达式将文件名中的 .jpg 后缀替换为 new_name.jpg,实现了文件名的统一。而在第二个案例中,使用正则表达式将文件名中的日期和序号进行提取,并按照指定格式进行重命名。

2.3. 使用脚本实现更复杂的操作

除了使用命令行命令,还可以编写脚本来实现更复杂的文件重命名操作。通过脚本,我们可以使用更复杂的条件和逻辑来进行文件名的修改。

# 案例一:根据照片的拍摄时间重命名

$ exiftool '-filename<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e *.jpg

# 案例二:按照指定的文件名列表进行重命名

$ cat filenames.txt | awk '{print "mv",$1,$2}' | sh

在第一个案例中,我们使用 exiftool 工具来提取照片的拍摄时间,然后将拍摄时间作为文件名进行重命名。这里的 "-d %Y%m%d_%H%M%S%%-c.%%e" 是日期时间的格式,可以根据实际需要进行调整。在第二个案例中,我们使用 cat 命令从 filenames.txt 文件中读取文件名列表,然后通过 awk 命令将每一行生成对应的 mv 命令,最后通过 sh 命令执行这些 mv 命令。

3. 总结

通过使用 Linux 系统中的一些技巧和命令,我们可以方便地批量重命名文件。无论是简单的重命名还是复杂的操作,我们都可以通过一些小技巧来完成。在实际使用时,可以根据具体需求选择合适的方法来进行文件重命名。

操作系统标签