如果我从使用 GUI 文件管理器切换到 CLI,我注意到速度会变慢的一件事是:
在 GUI 文件管理器中,我可以快速选择目录下的文件子集,
- 首先根据某种顺序对它们进行排序,以连续捕获尽可能多的文件子集,
- 然后通过按住 Shift 键并单击该范围中的第一个文件,然后单击最后一个文件来选择连续范围的文件,并且
- 然后也许单击一些不在连续范围内的文件。
在 CLI 中,我们有哪些方法可以尽快选择文件子集?谢谢!
答案1
对于zsh
shell,这通常是通过通配限定符完成的:
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 文件管理器中对多个目录一遍又一遍地执行相同的范围选择任务......