linux awk sed使用索引重命名文件[已关闭]

odopli94  于 2023-04-11  发布在  Linux
关注(0)|答案(3)|浏览(102)

已关闭,此问题需要更focused,目前不接受回答。
**要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

4天前关闭。
Improve this question
我在一个文件夹中有多个文件,按以下顺序命名:

im.0001.jpeg
im.0006.jpeg
im.0011.jpeg
im.0016.jpeg

etc

我如何重命名它们才能有这个:

im.0001.jpeg
im.0002.jpeg
im.0003.jpeg
im.0004.jpeg

etc

附言:目前的指数变化之间的数字是5,但这可能会有所不同

hsgswve4

hsgswve41#

像这样,使用Perl的rename

$ rename -n 's/\d+/sprintf "%.4d", ++$main::c/e' ./im*.jpeg
rename(./im.0006.jpeg, ./im.0002.jpeg)
rename(./im.0011.jpeg, ./im.0003.jpeg)
rename(./im.0016.jpeg, ./im.0004.jpeg)

删除-n开关,又名 * 试运行 * 当您的尝试是令人满意的重命名为真实的的
没有im.0001.jpeg,因为它已经存在。

klh5stk1

klh5stk12#

试试这个循环:

#!/bin/bash

files=$(printf '%s\n' im.*.jpeg)

index=1

for file in $files
do
  mv "$file" "im.$(printf '%04d' $index).jpeg"
  index=$((index+1))
done
8aqjt8rx

8aqjt8rx3#

你要求sed/awk,所以可能不想要循环等....试试这个:

printf "%s\n" *|awk -F . '{ if ($2==NR) next;printf "mv %s im.%4.4i.jpeg\n",$0,NR}'|sh

小心检查是否有相同的源和目标名称,因为它当前依赖于当前编号周围的点。
如果可能的错误(当前编号可能已经适合第一行)不会打扰您的私人安宁,您可以消除if ($2==NR) next;和evtl。

相关问题