在命令行中对文件进行编号并重新启动每个文件夹?

在命令行中对文件进行编号并重新启动每个文件夹?

我使用一个小脚本对文件进行编号。我从一个自定义操作开始thunar。仅当所有文件都位于同一目录中时才有效。新文件名是00001.ext00005.ext重命名 5 个文件时的名称。krename有一个为每个文件夹重新启动的选项。

当我有这个

/path/to/folder1/file1
/path/to/folder1/file2
/path/to/folder2/file1
/path/to/folder2/file2

我的脚本会创建这个

/path/to/folder1/00001
/path/to/folder1/00002
/path/to/folder1/00003
/path/to/folder2/00004
               ^
           folder two

我想要的是

/path/to/folder1/00001
/path/to/folder1/00002
/path/to/folder1/00003
/path/to/folder1/00004
               ^
           folder 1

是否有一个命令行工具可以重命名文件并为每个新文件夹重新启动?

答案1

使用珀尔的rename(可在任何操作系统中使用):

rename -n 's!folder\d+/.*!sprintf "folder1/%05d", ++$MAIN::c!se' ./folder*/*
$ tree folder*
folder1
├── 00001
├── 00002
├── 00003
└── 00004
folder2

删除-n开关,又名试运行当你的尝试令人满意时重命名为真实的

更深入:

您可以folder使用以下方式捕获:

rename -n 's!([^/]+)\d+/.*!sprintf("%s1/%05d", $1, ++$MAIN::c)!se' ./folder*/*

做到这一点动态的

如果需要的话,你可以在里面添加更多的逻辑,它是 Perl 代码。

答案2

zsh

autoload -Uz zmv
n=0
(cd /path/to && zmv -n 'folder<->/*(#qDn.)' 'folder1/${(l[5][0])$((++n))}')

请注意nglobq限定符,因此文件按数字排序,例如,folder10 中的文件在folder9 中的文件之后重命名,而不是在使用默认词法排序获得的folder1 和folder2 中的文件之间重命名。

如果满意,请删除-n(试运行)。

相关内容