返回

如何通过 Bash 脚本给目录中所有文件添加字母数字前缀?

Linux

## 如何在 Bash 中重命名目录中的所有文件,以便添加字母数字前缀?

问题

当我们使用 USB 闪存盘在电视上播放视频文件时,可能会遇到文件播放顺序混乱的问题,原因是电视以错误的顺序对文件进行排序。为了解决这个问题,我们可以通过添加字母数字前缀(例如 "a"、"b"、"c" 等)到文件名前来手动指定播放顺序。

解决方法

在 Bash 中,我们可以使用以下脚本递归地重命名目录中的所有文件:

#!/bin/bash

# 获取当前目录下的所有目录
directories=(*/)

# 循环遍历每个目录
for directory in "${directories[@]}"; do
    # 获取目录中的所有文件
    files=( "$directory"* )

    # 循环遍历每个文件
    for file in "${files[@]}"; do
        # 获取文件的扩展名
        extension="${file##*.}"

        # 根据文件的扩展名,创建新的文件名
        new_filename=""
        case "$extension" in
            mp4)
                new_filename="a $file"
                ;;
            txt)
                new_filename="b $file"
                ;;
            pdf)
                new_filename="c $file"
                ;;
            *)
                new_filename="d $file"
                ;;
        esac

        # 重命名文件
        mv "$file" "$new_filename"
    done
done

使用说明

  1. 将脚本复制到包含要重命名的目录的文件夹中。
  2. 确保脚本具有可执行权限(chmod +x rename.sh)。
  3. 运行脚本(./rename.sh)。

自定义前缀

脚本中使用了硬编码字母数字前缀。我们可以根据自己的需要修改它,例如:

case "$extension" in
    mp4)
        new_filename="video_$file"
        ;;
    txt)
        new_filename="text_$file"
        ;;
    pdf)
        new_filename="pdf_$file"
        ;;
    *)
        new_filename="other_$file"
        ;;
esac

常见问题解答

Q1:是否可以重命名文件中的特定字符串?

A:可以,使用 rename 命令:

rename 's/old_string/new_string/' *

Q2:如何批量重命名具有特定模式的文件?

A:使用通配符:

mv *.mp4 new_*.mp4

Q3:是否可以在重命名时跳过某些文件?

A:使用 -n 选项:

mv -n *.txt new_*.txt

Q4:如何重命名目录中的所有文件,包括子目录?

A:使用 find 命令:

find . -name "*.*" -exec mv {} new_{} \;

Q5:是否可以在文件名中添加日期或时间戳?

A:使用 date 命令:

mv file.txt "$(date +%Y-%m-%d-%H%M%S)_file.txt"