排序后选择一系列文件

排序后选择一系列文件

如果我从使用 GUI 文件管理器切换到 CLI,我注意到速度会变慢的一件事是:

在 GUI 文件管理器中,我可以快速选择目录下的文件子集,

  • 首先根据某种顺序对它们进行排序,以连续捕获尽可能多的文件子集,
  • 然后通过按住 Shift 键并单击该范围中的第一个文件,然后单击最后一个文件来选择连续范围的文件,并且
  • 然后也许单击一些不在连续范围内的文件。

在 CLI 中,我们有哪些方法可以尽快选择文件子集?谢谢!

答案1

对于zshshell,这通常是通过通配限定符完成的:

mv -- *(.om[1,10]) /dir

将 10 个最新的非隐藏常规文件移动到/dir.

通过完成系统(通过运行启用compinstall),您还可以告诉zsh展开该列表并使用 来选择要展开的列表Alt-A

答案2

在 GUI 中,排序、滚动一堆、手动选择范围以及在范围中打孔都是很自然的事情。

有人可能会说,这也是乏味且容易出错的。

在 CLI(即 unix shell)中,您有更强大的手段。

当使用文件名作为键进行排序时,您可以使用通配符来选择范围,例如

$ rm someprefix*mid*.[0-9]

在排序列表中,以“someprefix”开头的文件将连续显示 - 但因为我们有通配符,所以不需要显式地对它们进行排序。

即使使用基本的通配语法也可以创建强大的过滤器。像 zsh 这样的 shell 提供了扩展。

您还可以使用find组合多个标准,例如

$ find -type f -name 'someprefix*' -not '*.txt' -print0 | xargs -0 rm

它递归地删除所有以“someprefix”开头的文件,但排除以“.txt”结尾的文件。

find提供了许多构建表达式的选项,例如逻辑和/或、分组、基于文件大小、各种时间戳、应用于路径的正则表达式等进行选择。

特别是,递归选择(默认)的可能性可以加快许多任务的速度。想象一下,在 GUI 文件管理器中对多个目录一遍又一遍地执行相同的范围选择任务......

相关内容