singrium Asked: 2019-01-09 14:32:40 +0800 CST2019-01-09 14:32:40 +0800 CST 2019-01-09 14:32:40 +0800 CST 按顺序重命名多个文件并以相同的前缀开头 772 我有一个包含 1500 个文件的文件夹,我想通过终端或 shell 脚本自动重命名它们,如下所示:“prefix_number.extension”。 示例: cin_1.jpg、cin_2.png ... scripts command-line batch-rename rename 2 个回答 Voted Best Answer John1024 2019-01-09T14:45:49+08:002019-01-09T14:45:49+08:00 尝试: count=0; for f in *; do [ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}"; done 或者,如果您希望命令分布在多行上: count=0 for f in * do [ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}" done 这个怎么运作 count=0 这将变量初始化count为零。 for f in *; do 这将开始循环遍历当前目录中的所有文件。 [ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}" [ -f "$f" ]测试文件$f是否为常规文件(不是目录)。 如果$f是常规文件,则mv运行 move ( ) 命令。 -i告诉mv不要在不询问的情况下覆盖任何现有文件。 "cin_$((++count)).${f##*.}"是新文件的名称。 cin_是前缀。 $((++count))返回count递增后的值。 ${f##*.}是文件的扩展名$f。 done 这标志着循环的结束。 例子 考虑一个包含这三个文件的目录: $ ls alpha.jpg beta.png gamma.txt 让我们运行我们的命令: $ count=0; for f in *; do [ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}"; done 运行我们的命令后,目录中的文件现在是: $ ls cin_1.jpg cin_2.png cin_3.txt dessert 2019-01-09T14:52:32+08:002019-01-09T14:52:32+08:00 rename单线: rename -n 's/.+\./our $i; sprintf("cin_%d.", 1+$i++)/e' * 这将匹配名称中带有一个点的每个文件(最后一个,如果有多个),并重命名该部分,直到该点cin_后跟一个递增的数字和一个点。使用该-n标志,它只打印它会做什么,删除它以执行重命名。 示例运行 $ ls a.jpg b.jpg d.png e.png $ rename -n 's/.+\./our $i; sprintf("cin_%d.", 1+$i++)/e' * rename(a.jpg, cin_1.jpg) rename(b.jpg, cin_2.jpg) rename(d.png, cin_3.png) rename(e.png, cin_4.png) $ rename 's/.+\./our $i; sprintf("cin_%d.", 1+$i++)/e' * $ ls cin_1.jpg cin_2.jpg cin_3.png cin_4.png 资料来源:如何从命令行顺序重命名多个文件?
尝试:
或者,如果您希望命令分布在多行上:
这个怎么运作
count=0
这将变量初始化
count
为零。for f in *; do
这将开始循环遍历当前目录中的所有文件。
[ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}"
[ -f "$f" ]
测试文件$f
是否为常规文件(不是目录)。如果
$f
是常规文件,则mv
运行 move ( ) 命令。-i
告诉mv
不要在不询问的情况下覆盖任何现有文件。"cin_$((++count)).${f##*.}"
是新文件的名称。cin_
是前缀。$((++count))
返回count
递增后的值。${f##*.}
是文件的扩展名$f
。done
这标志着循环的结束。
例子
考虑一个包含这三个文件的目录:
让我们运行我们的命令:
运行我们的命令后,目录中的文件现在是:
rename
单线:这将匹配名称中带有一个点的每个文件(最后一个,如果有多个),并重命名该部分,直到该点
cin_
后跟一个递增的数字和一个点。使用该-n
标志,它只打印它会做什么,删除它以执行重命名。示例运行
资料来源:如何从命令行顺序重命名多个文件?