我使用一个小脚本对文件进行编号。我从一个自定义操作开始thunar
。仅当所有文件都位于同一目录中时才有效。新文件名是00001.ext
我00005.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))}')
请注意n
globq
限定符,因此文件按数字排序,例如,folder10 中的文件在folder9 中的文件之后重命名,而不是在使用默认词法排序获得的folder1 和folder2 中的文件之间重命名。
如果满意,请删除-n
(试运行)。