paw*_*jvn 10 command-line bash batch-rename
如何为一个目录中的文件添加数字?
在一个目录中,我有如下文件:
fileA
fileB
fileC
fileD
Run Code Online (Sandbox Code Playgroud)
我想为它们添加升序数字,如下所示:
1_fileA
2_fileB
3_fileC
4_fileD
Run Code Online (Sandbox Code Playgroud)
先感谢您。
mat*_*ure 11
解决方案之一:
cd <your dir> 然后在 bash 中运行(在命令行中复制和粘贴):
n=1; for f in *; do mv "$f" "$((n++))_$f"; done
Run Code Online (Sandbox Code Playgroud)
Bash 脚本案例:
#!/bin/bash
n=1
for f in *
do
if [ "$f" = "rename.sh" ]
then
continue
fi
mv "$f" "$((n++))_$f"
done
Run Code Online (Sandbox Code Playgroud)
rename.sh使用要重命名的文件将其保存为目录,chmod +x rename.sh然后运行它./rename.sh
PJ *_*ngh 10
在 Nautilus 中打开您的目录。
突出显示所有文件。
右键单击,然后从上下文菜单中选择“重命名...”。
在“重命名”对话框中,单击+Add按钮。
在“自动编号”下选择“1,2,3,4”
然后,在“重命名”对话框的文本输入字段中,在“[1, 2, 3]”和“[原始文件名]”之间插入一个下划线“_”字符。
它应该看起来像“[1, 2, 3]_[原始文件名]”
单击Rename按钮。
如果有超过 9 个文件,我将使用printf填充数字以获得预期的排序顺序,就像这样
n=0
for f in *
do printf -v new "%2d$((++n))_$f"
echo mv -v -- "$f" "$new"
done
Run Code Online (Sandbox Code Playgroud)
echo当您看到正确的结果时删除。
在这一行中,do printf -v new "%2d$((++n))_$f"我们为新文件名创建格式并将其放入变量new.
%2d是一个 2 位十进制数。代替2d,您可以使用3detc 来获得另一个前导 0(如果您有超过 99 个文件)。
((++n))增加变量n(我们在脚本开始时将其设置为 0)。由于每次循环运行时都会迭代一次,因此文件的名称前缀会增加。
-v品牌mv打印的内容将被改变。
--在mv语句中是为了防止开头的文件名-被解释为选项。
这是一份工作 file-rename (又名 perl 重命名或只是
rename):
file-rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
Run Code Online (Sandbox Code Playgroud)
这定义了一个变量,如果未设置则增加它(否则它将以0而不是1开头)并用每次增加的数字替换文件名的开头。您可以轻松地更改格式,例如,使其三位数(001,002,...)使用"%03d_"。运行-n它只打印更改,实际执行重命名删除此标志。
使用替代系统,rename链接到file-rename我的系统上。
$ ls -1
fileA
fileB
fileC
fileD
$ rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
rename(fileA, 1_fileA)
rename(fileB, 2_fileB)
rename(fileC, 3_fileC)
rename(fileD, 4_fileD)
$ rename 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
$ ls -1
1_fileA
2_fileB
3_fileC
4_fileD
Run Code Online (Sandbox Code Playgroud)