Emacsの dired は 指定されたディレクトリのファイル一覧を表示・管理する機能です。

一方、find-diredは、 シェルコマンドの find が出力した結果を Dired バッファとして表示する点が違います。

findコマンドとは

シェルのコマンドである find を説明するのは、この記事の本題ではありませんので、詳しい説明は省略させていただきますが、簡単に言えば、指定したディレクトリから、特定の条件でファイルやディレクトリを探したり、処理をするために使います。

例えば、Documentsフォルダから、jpgファイルだけを表示する場合、次のように実行します。

$ find Documets -type f -name "*.jpg"
Documents/image.jpg
Documents/FolderA/foo1.jpg
Documents/FolderA/foo2.jpg
Documents/FolderA/SubFolder/bar1.jpg
Documents/FolderA/SubFolder/bar2.jpg

Documentsフォルダを指定した後に、条件のオプションを指定しています。

  • -type f ファイルのみが対象
  • /-name “*.jpg”/ ワイルドカードを使ってファイル名に.jpgが含まれるのが対象

オプションには、たくさんの条件項目が用意されています。組み合わせることで複雑な条件をつくることができます。

find-dired の使いかた

冒頭で書いたとおり、Emacsの find-dired は、このfindコマンドの実行結果を Diredバッファとして表示しています。

M-x find-dired を実行すると、まず検索するディレクトリします。次に指定するのが findコマンドへ渡すオプションです。

例えば、こんな風に指定すると

-type f -name "*.org" -exec grep -q -i -e "#+TITLE" {} \;

あるディレクトリ配下にある、#+TITLE を含んだorgファイルだけが、Diredバッファとして表示されます。

grep コマンドに -q オプションを指定しておかないと、grepの条件に該当したテキストが Diredバッファに表示されてしまいます。見ためが崩れるだけで害はないようですが。

find-ls-optionをカスタマイズ

必須ではありませんが、ぼくは find-ls-option 変数を次のようにカスタマイズしています。

初期設定カスタマイズ
Find Option-ls-exec ls -ldh {} +
Ls Switches-dilsb-ldh

このように変更したのは find-ls-option のヘルプに記載があったからです。 初期設定のままでもいいのですが、変更することで少しよくなりました。

惜しいポイント

以前の記事で紹介した素晴しい機能 wdired があります。(関連記事 → 便利すぎるEmacsならではのファイル名の変更方法)

この wdired を 今回のfind-dired から表示された Dired バッファで実行すると、ファイル名を変更して保存するとDiredバッファが消えました。ファイル名の変更自体はできているのですが、続けて別のファイル名を変更するには再度、find-dired の実行が必要です。