我想将一组名为 IMG0189.jpeg IMG0190.jpeg 等的文件分别重命名为 IMG01.jpeg IMG02.jpeg 等。有没有办法使用重命名命令来做到这一点?或者其他什么?我尝试阅读手册,但它非常简短,并没有提供任何有关移动数字的想法。
答案1
怎么样
ls > /tmp/list ; seq -w `ls | wc -l` | paste /tmp/list - | awk -F\\t '{ print $1, "IMG"$2".jpeg"}' | xargs -n2 mv
- 列出文件并将列表重定向到临时文件
/tmp/list
seq
将等于文件数量的数字(用零填充) 写入STDOUT- 通过列出文件并
wc
以“行”模式传输到(字数统计)应用程序来获取文件数量
- 通过列出文件并
paste
将上一个命令中的数字序列放到文件列表的右侧/tmp/list
- 粘贴将两个文件粘贴在一起,并以字符分隔
TAB
列 - 将输出通过管道传输到下一个程序
- 粘贴将两个文件粘贴在一起,并以字符分隔
- 使用一个小
awk
程序来重新格式化这两个字段- 分隔符指定为制表符(
\t
- 第一个斜杠用于转义第二个斜杠) - 第一个字段
$1
,按原样打印的原始文件名 - 第二个字段
$2
,序列号,以 IMG 前缀和 .jpeg 后缀打印 - 将输出通过管道传输到下一个程序
- 分隔符指定为制表符(
- 使用
xargs
,将参数对传递给mv
(移动/重命名命令)-n2
意味着它将一次通过其中 2 个
注意,这假定您的原始文件名不包含空格。
如果要从 1 以外的数字开始,则需要操作 seq 的参数;例如
COUNT=`ls | wc -l` ; FIRST=32 ; LAST=$(($FIRST + $COUNT)) ; seq -w $FIRST $LAST