名前でファイルを検索する


11

特定の正規表現に適合する名前を持つすべてのファイルをディレクトリツリーで再帰的に単一のdiredバッファーに移動するにはどうすればよいですか?

それで、一度にそれらの名前を変更/削除できますか?


2
あなたはすでに「名前検索」を検討しましたか?(正規表現ではなくワイルドカードを使用します。)
Marco Wahl

2
回答として@MarcoWahlを送信してください。diredがそれを行うことができるとは思いもしませんでした!
タイラー

1
ライブラリfind-dired+.elは、コマンドの拡張バージョンを提供しますfind-name-dired。(1)最小と最大の検索深度と(2)検索から除外するパスを指定するオプションの引数を受け入れます。
2016年

回答:


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-dired "〜/ myorgs /" "* org"))を使用して特別な検索をコマンドにして、それをinitファイルに入れます。次に、Mx my-find-orgfiles RETを使用します。または、コマンドをキーにバインドすることもできます。
Marco Wahl

することができますmy-find-orgfiles ()「トン」と「Q」//選択がすべてと適用されることに続いて?@Marco Wahl
アルパー

2

正規表現

正規表現を使用するには、も試してみてくださいfind-lisp-find-dired。このコマンドは標準libに属しています。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

ボーナス

elisp、 'ls-lisp'、または 'eshell-ls'に実装された 'ls'でDiredを実行している場合、次の構文でワイルドカードに一致するすべてのファイルを再帰的にリストできます。

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

「**」に注意してください。この場合、ワイルドカードと一致する「〜/ soft」のすべてのファイルが表示されます。「〜/ soft / qux.c」も含まれます。

ただし、insert-directory-program ワイルドカード拡張を使用している場合は、システムシェルによって展開されます。つまり、この再帰的な「**」構文は、シェルでサポートされている場合にのみ機能します。たとえば、zshはサポートしていますが、bashはサポートしていません。zsh以外のシェルでは、前のコマンドは次のように実行されます。

C-x d ~/soft/*/*.c RET
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.