按名称查找文件


11

如何将目录树中递归地将名称与特定正则表达式一致的所有文件引入单个Dired缓冲区?

因此,我可以一次重命名/删除它们吗?


2
您是否已经考虑过“查找名称固定”?(使用通配符,而不使用正则表达式。)
Marco Wahl

2
您应该将其作为答案@MarcoWahl提交。我不知道苦恼可以做到这一点!
泰勒

1
find-dired+.el为您提供了增强的command版本find-name-dired。它接受可选的参数,这些参数指定(1)最小和最大搜索深度以及(2)要从搜索中排除的路径。
提请

Answers:


11

通配符

采用

M-x find-name-dired

根据通配符获取文件。

在目录“〜/ org /”中找到所有后缀为“ org”的文件。输入以下内容

M-x find-name-dired
~/org
*org

享受。

正则表达式

采用

M-x find-dired

带有合适的参数以根据正则表达式获取文件。

在目录“〜/ org /”中找到所有后缀为“ org”的文件。输入以下内容

M-x find-dired
~/org
-regex ".*org$"

享受。


是否有可能你完成这项过程,其中自动检查*org无需手动输入它
阿尔珀

如果我对您的理解正确,那么有很多可能性。例如,使用(defun my-find-orgfiles()(interactive)(find-name-dirted“〜/ myorgs /”“ * org”))对命令进行特殊搜索,然后将其放入您的init文件中。然后使用Mx my-find-orgfiles RET。甚至将命令绑定到密钥。
Marco Wahl

可以my-find-orgfiles ()紧随其后的是“ t”和“ Q” //并全部选择并应用吗?@Marco Wahl
alper

2

正则表达式

要使用正则表达式,您也可以尝试find-lisp-find-dired。该命令属于标准库。find-lisp,它完全用elisp编写,即,您不需要安装外部 find程序。

例如,以下显示了目录〜/ lisp下所有扩展名为'.el'的文件:

M-x find-lisp-find-dired RET ~/lisp RET \.el\' RET

(比赛获得荣誉case-fold-search)。

通配符

值得注意的是,自从下一个Emacs版本(v26.1)起,Dired在文件名参数的目录部分中支持通配符。这意味着以下工作:

C-x d ~/soft/*/*.c RET

(匹配项区分大小写)。

此命令在Dired缓冲区中显示所有扩展名为'.c'的文件,在'〜/ soft'下具有2个深度级别。这意味着将列出所有类似于 '〜/ soft / foo / bar.c'的文件,但不会列出诸如'〜/ soft / qux.c''〜/ soft / foo / baz / qux.c'等文件

相同但不区分大小写:

C-x d ~/soft/*/*.[cC] RET

奖金

如果运行Dired并在elisp,'ls-lisp'或'eshell-ls'中实现了'ls',则可以使用以下语法递归列出与通配符匹配的所有文件:

C-x d ~/soft/**/*.c RET

注意“ **”。在这种情况下,将显示与通配符匹配的'〜/ soft'下的所有文件,甚至是'〜/ soft / qux.c'

但是,当您使用insert-directory-program 通配符扩展时,是由系统外壳进行的;这意味着,这种递归的“ **”语法仅在您的shell支持时才有效。例如,zsh支持它,但bash不支持。对于zsh以外的其他外壳,上一个命令将执行以下操作:

C-x d ~/soft/*/*.c RET
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.