我想使用“图形”文件管理器按文件名中的指定位置对文件目录进行排序。
我有很多这种类型的文件(例如):
0001_oeirnglhk.ext
0002_gkggkcxiuv.ext
0003_xcvxemrn.ext
0004_tteytzpsiogut.ext
0005_sdfdtyeienvf.ext
...
0347_bwvoxciurnsa.ext
↑
└ sort starts here
我希望排序从第 5 列开始,这是这些字符串中的第一个“alpha”字符。我的目标是在保留数字前缀的同时检查 alpha 排序匹配(或接近匹配),然后决定可能的手动干预。我尝试通过将名称转储到文本文件,然后对文件名进行排序来做到这一点,但这在“干预”阶段变得非常笨拙,因此寻求“gui”解决方案。
我在 PCManFM、Nautilus、Nemo、Thunar 和 Double Commander 中对此进行了探讨,但没有成功。是否有插件、扩展程序或其他应用程序可以做到这一点?
虽然我的理想是获得“gui”解决方案,但如果终端中有可行的解决方案,我也会很感激知道这些。例如,如果数字前缀可以临时移动,并在文件操作完成后恢复,那也适用于我。
更新:虽然@terdon 的简洁(并且被接受!)解决方案让我能够有效地处理这个特定的任务,但了解一个可以对目录文件名的任意“列”进行排序的图形文件管理器仍然是一件好事。
一种方法是重命名文件,使它们更容易使用 GUI 工具进行排序。为了测试这一点,我创建了一些带有升序数字前缀和随机名称的文件:
这在我的系统上创建了以下文件:
为了根据需要对它们进行排序,将数字前缀移动到文件名的末尾就足够了。您可以使用以下
rename
命令执行此操作(要在不实际修改任何名称的情况下测试名称更改,请使用-n
代替-v
):该
rename
命令本质上是读取 Perl。在这里,我们给它一个替换运算符 (s/original/replacement/
),它将应用于每个文件名并将其重命名为所述运算符的结果。使用的正则表达式将匹配从文件名开头 (^
) 到第一个_
((.*?)_
) 的所有内容。使?
匹配非贪婪,迫使它找到最短的匹配字符串。括号“捕获”匹配的子字符串,使它们在运算符的右侧可用。第一个捕获的模式将是$1
,第二个$2
等等。结果是数字前缀 ($1
) 移动到名称的其余部分 ($2
) 之后。运行此命令后,您可以打开目录并使用 GUI 编辑器执行您的操作。要反转它并返回原始名称,请使用:
在这里,正则表达式匹配直到 a 的所有内容
_
,然后匹配一个或多个数字 (\d+
),直到字符串 ($
) 的结尾。--
结尾是许多命令行程序的一般特征,它表示选项的结束。这样可以确保任何以 a 开头的文件名-
都不会被误认为是选项。更好的方法是简单地使用
sort
命令行中的命令。它有一个-k
选项,允许基于某个字段和该字段中的字符进行排序。字段是两个字段分隔符之间的一组字符,默认为空格。在您的情况下,每个文件名中只有一个字段。然后,您需要在第一个字段中指定要用于排序的字符。sort
从 1 开始计数,所以第一个字母是数字 6。您还需要形成每行一个文件名的文件列表。这是通过
-1
选项来完成的ls
。然后整个工作由一行完成:
ls -1| sort -k 1.6
并且不需要重命名文件。