为文件添加统一的前缀

当管理大量的PDF电子书时,对于某一系列的书籍而言,统一添加上相应系列的前缀或后缀是一个非常好的习惯,这特别有利于检索。在Linux下,有几种方法可以方便的实现这个功能。

通用命令解决方案

xargs 和 mv 组成管道命令
1
ls | xargs -I {} mv {} prefix_{}

这段命令的工作原理是:首先列出当前目录下的所有文件名,然后对每个文件名执行mv命令,将其重命名为带有前缀的新名称。

注意事项

  • 上面的例子不会处理隐藏文件(以.开头的文件)。如果需要包括隐藏文件,请相应地调整通配符或命令。
  • 在执行这些命令之前,建议先备份重要数据,以防不测发生误操作。
  • 如果你的文件名中包含空格或其他特殊字符,可能需要对上述命令进行适当的修改,例如使用find结合-print0和xargs -0来安全处理这些文件名。

使用 rename 命令(Perl版本)

对于大多数Linux发行版,你可以直接使用Perl版本的rename命令,它非常适合这类任务。

1
rename 's/^/prefix_/' *

使用 Shell 脚本

为当前目录下所有文件添加前缀

1
2
3
for file in *; do
mv "$file" "prefix_$file"
done

注意事项

  • 这个命令不会重命名目录本身。
  • 如果有子目录,这个命令也不会进入子目录。
  • 不会重命名隐藏文件(以 . 开头的文件),如需包括,请看进阶用法。

只为普通文件添加前缀(跳过目录)

1
2
3
4
5
for file in *; do
if [ -f "$file" ]; then
mv "$file" "prefix_$file"
fi
done

为指定类型文件添加前缀(如 .txt 文件)

1
2
3
for file in *.txt; do
mv "$file" "prefix_$file"
done

递归为当前目录及其子目录中的文件添加前缀

1
2
3
4
5
find . -type f | while read file; do
dir=$(dirname "$file")
base=$(basename "$file")
mv "$file" "$dir/prefix_$base"
done

添加时间戳作为前缀

1
2
3
4
5
6
prefix=$(date +%Y%m%d)
for file in *; do
if [ -f "$file" ]; then
mv "$file" "${prefix}_$file"
fi
done

特别注意!

在进行大规模文件重命名之前,建议先备份重要数据,并考虑在一个小样本上测试你的命令。