当管理大量的PDF电子书时,对于某一系列的书籍而言,统一添加上相应系列的前缀或后缀是一个非常好的习惯,这特别有利于检索。在Linux下,有几种方法可以方便的实现这个功能。
通用命令解决方案
xargs 和 mv 组成管道命令1
| ls | xargs -I {} mv {} prefix_{}
|
这段命令的工作原理是:首先列出当前目录下的所有文件名,然后对每个文件名执行mv命令,将其重命名为带有前缀的新名称。
注意事项
- 上面的例子不会处理隐藏文件(以
.
开头的文件)。如果需要包括隐藏文件,请相应地调整通配符或命令。
- 在执行这些命令之前,建议先备份重要数据,以防不测发生误操作。
- 如果你的文件名中包含空格或其他特殊字符,可能需要对上述命令进行适当的修改,例如使用find结合-print0和xargs
-0来安全处理这些文件名。
使用 rename 命令(Perl版本)
对于大多数Linux发行版,你可以直接使用Perl版本的rename命令,它非常适合这类任务。
使用 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
|
特别注意!
在进行大规模文件重命名之前,建议先备份重要数据,并考虑在一个小样本上测试你的命令。