diredはディレクトリ一覧をバッファに作成します。 場合によっては、サブディレクトリの一覧も含まれます。 普通のEmacsコマンドでこのバッファの中を動き廻ったり、 特別なdiredコマンドで一覧中にあるファイルを操作できます。
diredを起動するには、C-x dかM-x diredを使います。
このコマンドは、一覧表示するファイルを指定するための
ディレクトリ名やファイルのワイルドカードパターンをミニバッファで読み取ります。
diredがlist-directoryと違うのは、
バッファがdiredモードになっていて
特別なdiredコマンドを使えるようになることです。
変数dired-listing-switchesには、
ディレクトリ一覧を作成するlsプログラムに与えるオプションを指定します。
オプション中には`-l'が必ず含まれている必要があります。
diredコマンドに数引数を指定すると、
ミニバッファでディレクトリを指定するまえに
lsのオプションを指定できます。
diredバッファを現在選択しているウィンドウではなく
別のウィンドウに表示したい場合には、
C-x dのかわりにC-x 4 d(dired-other-window)を使います。
C-x 5 d(dired-other-frame)は
別のフレームにdiredバッファを表示します。
diredバッファは『読み出し専用』であり、 このバッファに文字を挿入しても意味がないので、 dやxのような通常の印字文字は特別なdiredコマンドに使われます。 diredコマンドのいくつかは、diredバッファの カレントファイル(current file、つまり、現在行のファイル)に 印(mark)やフラグ(flag)を付けます。 他のコマンドは、印やフラグが付いたファイル群に作用します。
Emacsの普通のカーソル移動コマンドはdiredバッファでも使えます。 特殊用途のカーソル移動コマンドもあります。 C-nとC-pは、カーソルを行の先頭ではなく ファイル名の先頭に位置合わせするように再定義されています。
さらに便利なように、 diredモードではSPCとnはC-nに等価です。 pはC-pに等価です。 (diredでは行単位の移動をよく行うため、打鍵しやすくしてある。) DEL(上に移動してフラグを消す)は、単に上へ移動する場合には便利です。
diredの主な利用法は、ファイルに削除のフラグを付けてから、 フラグの付いているファイルを(本当に)削除することです。
ファイルに削除フラグを付けるには、 そのファイルを表示している行に移動してdと打ちます。 削除フラグは、行頭に表示される`D'という文字でわかります。 このコマンドはポイントをつぎの行に進めますから、 dコマンドを繰り返し実行すれば後続のファイルにもフラグを 付けることができます。 数引数は反復回数になります。
即座にファイルを削除するかわりに削除フラグを付けるので、
誤ってファイルを消してしまう危険性は低くなります。
フラグを付けたファイルを抹消するようにdiredに指示するまでは、
uやDELを使って削除フラグを消せます。
u(dired-unmark)は、dと同じように動作しますが、
フラグを付けるのではなくフラグを消します。
DEL(dired-unmark-backward)は上に移動してフラグを消します。
これは、数引数-1を指定したuと同じです。
削除フラグが付いたファイルを(本当に)削除するには、
x(dired-expunge)と打ちます。
このコマンドは、削除フラグが付いたファイルの一覧を表示し、
yesでの確認応答を求めます。
確認するとdiredはフラグが付いたファイルを削除し、
diredバッファからそれらに対応する行を削除します。
小さくなったdiredバッファは選択されたままです。
確認にnoと答えたり、C-gで中断すると、 ただちにdiredに戻りますが、削除フラグは付いたままで、 ファイルを実際に削除しません。
#、~、&、.のコマンドは、 ファイル名に基づいて数多くのファイルに削除フラグを付けます。 これらのコマンドは本当に便利です。 というのは、ファイルを実際には削除しないからです。 残しておきたいファイルの削除フラグは消せばいいのです。
&(dired-flag-garbage-files)は、
変数dired-garbage-files-regexpで指定される
正規表現に一致する名前のファイルに削除フラグを付けます。
デフォルトは、TeXが生成するある種のファイルと
patchプログラム
(46)
が生成する`.orig'と
`.rej'のファイルです。
#(dired-flag-auto-save-files)は、
自動保存ファイルと思われる名前のファイル、
すなわち、名前が`#'で始まり`#'で終るもの
すべてに削除フラグを付けます。
~(dired-flag-backup-files)は、
バックアップファイルと思われる名前のファイル、
すなわち、名前が`~'で終るものすべてに削除フラグを付けます。
.(ピリオド、dired-clean-directory)は、
バックアップファイルのいくつか、つまり、
古いもの数個と新しいもの数個を除くすべてに削除フラグを付けます。
通常、変数dired-kept-versions
(保存するときに適用される変数kept-new-versionsではない)
には新しい版を何個残すかを指定し、
変数kept-old-versionsには古い版を何個残すかを指定します。
C-u 3 .のように正の数引数をピリオドに指定すると、
変数dired-kept-versionsを無視して新しい版を何個残すか指定します。
負の数引数は変数kept-old-versionsを無視して
数引数の絶対値で古い版を何個残すか指定します。
% dコマンドは、指定した正規表現(dired-flag-files-regexp)に
一致する名前のファイルに削除フラグを付けます。
ファイル名のうちディレクトリに無関係な部分についてだけ一致を調べます。
`^'(先頭)や`$'(末尾)で、一致箇所を固定できます。
サブディレクトリを隠蔽すれば、サブディレクトリを一致検査から除外できます
(see section サブディレクトリの隠蔽)。
diredには、diredバッファに表示したファイルを訪問したり調べたりするための コマンドがあります。 これらは現在行のファイルに作用します。 そのファイルが実際にはディレクトリであると、 これらのコマンドはそのサブディレクトリに対して (別のdiredバッファを作って)diredを起動します。
dired-find-file)
see section ファイルを訪問する。
dired-find-file-other-window)。
diredバッファは最初のウィンドウに表示されたまま残る。
これはC-x 4 C-fでファイルを訪問するのに似ている。
see section 複数のウィンドウ。
dired-display-file)。
dired-mouse-find-file-other-window)。
oコマンドのように、
ファイルの表示には別のウィンドウを使う。
dired-view-file)。
ファイルを閲覧することはファイルを訪問することに似ているが、
ファイルの中で移動できることに重きを置き、
ファイルの変更は許されない。
see section その他のファイル操作。
ファイルに`D'で示される削除フラグを付けるかわりに 他の文字(通常`*')で示される印を付けることもできます。 『抹消』(x)以外のほとんどのdiredコマンドは、 `*'で印付けしたファイルを扱えます。
以下のコマンドは、`*'で印付けするコマンド、 印を消すコマンド、印に作用するコマンドです。 (フラグを付けたり消したりするコマンドについてはsee section diredでのファイル削除。)
dired-makr)。
数引数nを指定すると、カレントファイルから始めて後続の
n個のファイルに印を付ける。
(nが負の場合は、上の-n個のファイルに印を付ける。)
dired-mark-executables)。
数引数を指定すると、これらのファイルすべての印を消す。
dired-mark-symlinks)。
数引数を指定すると、これらのファイルすべての印を消す。
dired-mark-directories)。
数引数を指定すると、これらのディレクトリすべての印を消す。
dired-mark-subdir-files)。
dired-unmark)。
dired-unmark-backward)。
dired-unmark-all-files-no-query)。
dired-unmark-all-files)。
引数は1文字。
RETで入力を終えてはならない。
数引数を指定すると、このコマンドは印の付いたファイルごとに
印を消すかどうか聞いてくる。
yは消すの意味、nは消さないの意味。
!で答えると残りのファイルすべてについて問い合わせずに印を消す。
dired-next-marked-file)。
ファイルに『印』が付いているとは、なんらかの印があること。
dired-prev-marked-file)
dired-do-toggle)。
つまり、`*'で印が付いているファイルの印を消し、
印が付いていなかったファイルすべてに`*'で印を付ける。
`*'以外で印が付いたファイル群は影響されない。
dired-change-marks)。
このコマンドは、`*'や`D'以外の文字で印を付けるための主要な手段。
引数はそれぞれ1文字。
RETで入力を終えてはならない。
このコマンドではほとんどどんな文字でも印として使えるため、
ファイルをいろいろに分類できる。
oldが空白(` ')であると、
コマンドは印が付いていないすべてのファイルに作用する。
newが空白であると、コマンドは作用するファイルの印を消す。
下の例はこのコマンドの能力を例示するものであり、
印のないファイルすべてに`D'フラグを付け、
`D'フラグが付いているものすべてからはフラグを消します。
* c D t * c SPC D * c t SPCここでは、`t'で印を付けたファイルはないものと仮定します。
dired-mark-files-regexp)。
このコマンドは% dに似ているが、
削除フラグ`D'のかわりに`*'でファイルに印を付ける。
see section 一度に多数のファイルにフラグを付ける。
ファイル名のうちディレクトリに無関係な部分だけで一致を検査する。
`^'(先頭)や`$'(末尾)で、一致箇所を固定できる。
サブディレクトリを一致検査から除外するには、
サブディレクトリを隠蔽する。
dired-mark-files-containing-regexp)。
このコマンドは% mに似ているが、
ファイル名ではなくその内容で探す。
dired-undo)
本節では、ファイルを操作する基本的なdiredコマンドについて説明します。 コマンドはすべて大文字であり、実行前に、引数を読み取ったり確認を求めるために ミニバッファを使います。 これらすべてのコマンドには、 操作対象となるファイルを指定する方法がいくつかあります。
以下は、上のように操作対象を選ぶファイル操作コマンドの一覧です。 (!や%などの他のdiredコマンドも、 操作対象とするファイルを決定するのに上の方法を用いる。)
dired-do-copy)。
引数newはコピー先のディレクトリか、
(1つのファイルをコピーする場合は)新しい名前。
変数dired-copy-preserve-timeがnil以外の場合には、
このコマンドでコピーしたファイルの更新時間はもとのファイルと同じになる。
dired-do-delete)。
本節の他のコマンドと同様に、このコマンドは印付けされたファイル、
あるいは、後続のn個のファイルに作用する。
対照的に、x(dired-expunge)は、
フラグが付いたファイルを削除する。
dired-do-rename)。
引数newは移動先のディレクトリか、
(1つのファイルの名前を変える場合には)新しい名前。
diredは、名前を変更したファイルに対応するバッファの訪問先の
ファイル名を自動的に変更するので、新しい名前が反映される。
dired-do-hardlink)。
引数newはリンクを置くディレクトリか、
(1つのリンクを張る場合には)リンクに与える名前。
dired-do-symlink)。
引数newはリンクを置くディレクトリか、
(1つのリンクを張る場合には)リンクに与える名前。
dired-do-chmod)。
このコマンドはchmodプログラムを使うので、
modspecにはchmodが扱える任意の引数を指定できる。
dired-do-chgrp)。
dired-do-chown)。
(ほとんどのシステムでは、スーパーユーザーだけがこれを実行できる。)
変数dired-chown-programで、
実際の操作を行うために使用するプログラムの名前を指定する。
(システムによっては、chownを置く場所が異なる。)
dired-do-print)。
ファイルを印刷するコマンドを指定する必要があるが、
(lpr-bufferが使うのと同じ)
変数lpr-commandとlpr-switchesとから推定した
適切なものがミニバッファに示される。
dired-do-compress)。
ファイルがすでに圧縮済みと思われるときは展開する。
dired-do-load)。
see section Emacs用のLispコードのライブラリ。
dired-do-byte-compile)。
see section `バイトコンパイル' in Emacs Lisp リファレンスマニュアル。
dired-do-search)。
このコマンドはtags-searchの変形。
最初にみつかったところで探索は終る。
探索を再開してつぎに一致するものを探すには、M-,を使う。
see section タグテーブルを用いた探索と置換。
query-replace-regexp(問い合わせながら正規表現を置換する)を実行し、
from(正規表現)に一致する部分をtoに置換する
(dired-do-query-replace)。
このコマンドはtags-searchの変形。
置換のループを抜けたあとに、
探索を再開してさらに置換を行うには、M-,を使う。
see section タグテーブルを用いた探索と置換。
+は特別なファイル操作コマンドです(dired-create-directory)。
このコマンドは、ディレクトリ名を読み取り、
それが既存でなければ新たに作成します。
diredコマンドの!(dired-do-shell-command)は、
ミニバッファからシェルコマンドを読み取り、
指定したファイルすべてについてそのシェルコマンドを実行します。
diredコマンドの普通の方法で操作対象のファイルを指定できます
(see section ファイルの操作)。
複数ファイルにシェルコマンドを適用する方法は2通りあります。
tarを実行し、
指定した一連のファイルを`foo.tar'というtarファイルにまとめる。
uudecodeコマンドを実行する。
各ファイルごとにコマンドを1回実行したいが、
コマンドの最後ではなく途中にファイル名を指定したい場合にはどうするのでしょう?
あるいは、もっと複雑にファイル名を指定したい場合にはどうするのでしょう?
それにはシェルのループを使います。
下の例では、指定した各ファイルに対してuuencodeを実行しますが、
その出力は対応する`.uu'というファイルに格納します。
for file in *; do uuencode $file $file >$file.uu; done
シェルコマンドの作業ディレクトリは、 diredバッファのトップディレクトリです。
!コマンドは、実行後に新たにできたファイルや変更された ファイルを表示するためにdiredバッファを更新することはしません。 これはシェルコマンドを実際には理解しておらず、 シェルコマンドがどのファイルを変更するのかわからないからです。 diredバッファを更新するにはgコマンドを使います (see section diredバッファの更新)。
ここにあげるコマンドはファイル名を組織的に変更します。
dired-upcase)。
古いファイル名が`Foo'と`bar'だった場合、
新しいファイル名は`FOO'と`BAR'になる。
dired-downcase)。
古いファイル名が`Foo'と`bar'だった場合、
新しいファイル名は`foo'と`bar'になる。
正規表現の置換を用いる4つのコマンドは、実質的には、 diredバッファにおいて一連の選択したファイルの名前を 探索して置換を行います。 これらは引数を2つ読み取ります。 正規表現fromと置換パターンtoです。
これらのコマンドは、正規表現fromに一致する各『古い』ファイル名の
一致した部分をtoで置換します。
replace-regexp(see section 正規表現による置換)のように、
toの中では`\&'や`\digit'を用いて
古いファイル名に一致したパターン全体やその一部を参照できます。
ファイル名の2箇所以上の部分に正規表現が一致する場合には、
最初の一致部分が置換されます。
たとえば、% R ^.*$ RET x-\& RETは、 選択されたファイルの名前の先頭にx-を付け加える形で 名前を変えます。 逆に、各ファイルの名前の先頭の`x-'を取り去ることもできて、 1つの方法は、% R ^x-\(.*\)$ RET \1 RETです。 あるいは、% R ^x- RET RETでもできます。 (ファイル名全体に一致するようにするには`^'と`$'を使う。)
通常、置換処理ではファイル名のディレクトリ部分は考慮しません。 ディレクトリ内のファイルの名前だけを操作します。 数引数0を指定すると、置換はディレクトリ名を含んだ絶対ファイル名に作用します。
一連のファイルを操作対象に選ぶときに、 それらを操作するときに使うのと同じregexp(正規表現)を使いたい場合が あるでしょう。 これを行うには、% m regexp RETでまず一連のファイルに 印を付けてから、それらを操作するコマンドにも同じ正規表現を使います。 これを簡単に行えるように、 %の付いたコマンドは、%付きコマンドいずれかに最近指定した 正規表現をデフォルトで使います。
diredには、指定したファイルをdiffで比較するコマンドが2つあります。
diffプログラム(dired-diff)を用いて、
(ポイントがある箇所の)カレントファイルを
(マークがある箇所の)他のファイルと比較する。
マークがある箇所のファイルがdiffの第1引数で、
ポイントがある箇所のファイルが第2引数になる。
dired-backup-diff)。
カレントファイルがバックアップファイルそのものであるときは、
バックアップファイルのバックアップファイルとの比較を行う。
このようにして、任意の版のバックアップファイルとの比較を行える。
バックアップファイルはdiffの第1引数になる。
通常、diredバッファは1つのディレクトリだけを表示します。 しかし、そのサブディレクトリ群を一緒に表示させることもできます。
1つのdiredバッファ内に複数のディレクトリを表示させるもっとも簡単な方法は、
lsを実行するときにオプション`-lR'を指定することです。
(diredを実行するときに数引数を指定すると、
これらのオプションをミニバッファで指定できる。)
これにより、すべてのレベルのすべてのサブディレクトリを表示した
再帰的なディレクトリ一覧を作れます。
しかし、一般には、すべてのサブディレクトリでは多すぎます。 普通は、特定のサブディレクトリだけを含めたいでしょう。 それには、iコマンドを使います。
ディレクトリであるファイルを表す行で、
i(dired-maybe-insert-subdir)コマンドを使います。
指定したサブディレクトリの内容を同じdiredバッファに挿入し、
その箇所へ移動します。
挿入されたサブディレクトリの内容は、
`ls -lR'の出力と同様に、
diredバッファのトップレベルのディレクトリのあとに続きます。
すでにサブディレクトリの内容がバッファにある場合には、 iコマンドはその表示箇所に移動するだけです。
どちらの場合においても、iは移動するまえにEmacsのマークを設定するので、 C-u C-SPCでバッファ内のもとの箇所 (そのサブディレクトリを表す行)へ戻れます。
サブディレクトリの内容を更新するには、
l(dired-do-redisplay)コマンドを使います。
サブディレクトリを削除するにはkを使います。
See section diredバッファの更新。
diredバッファにサブディレクトリが表示されている場合、 コマンドC-x [とC-x ]でディレクトリ単位に移動できます。
以下のコマンドは、1つのdiredバッファ内で ディレクトリ木構造を上下に移動するコマンドです。 これらはすべてディレクトリのヘッダ行 (directory header lines)、 つまり、ディレクトリの内容を表示する部分の先頭にある ディレクトリ名を示す行に移動します。
dired-next-subdir)。
dired-prev-subdir)。
dired-tree-up)。
dired-tree-down)。
dired-prev-dirline)。
これらの行は、親ディレクトリにおいてファイルとしてディレクトリを表す行。
dired-next-dirline)。
サブディレクトリの隠蔽(hide)とは、 選択的表示(see section 選択的な表示)を用いて ヘッダ行以外を見えなくすることです。
dired-hide-subdir)。
数引数は反復回数。
dired-hide-all)。
あるいは、隠蔽されているサブディレクトリがある場合には、
すべてのサブディレクトリを再表示する。
このコマンドを使うと、
深いディレクトリ木構造の概形を調べたり、
遠く離れたサブディレクトリへ素早く移動できる。
通常のdiredコマンドは、 隠蔽されたサブディレクトリ内のファイルについてまったく考慮しません。 たとえば、印を付けたファイルに作用するコマンドは、 隠蔽されたディレクトリ内に印を付けたファイルが あったとしてもそれらを無視します。 したがって、サブディレクトリを一時的に隠蔽すれば、 印を消さなくてもサブディレクトリを操作対象から外せます。
サブディレクトリを隠蔽するコマンドはトグルとして働きます。 つまり、表示されていれば隠蔽し、隠蔽されていれば表示します。
本節では、(diredとは無関係に)外部でのディレクトリやファイルの変更を diredバッファに反映させるコマンド、および、 diredバッファの一部を削除するコマンドを説明します。
revert-buffer)。
dired-do-redisplay)。
dired-do-kill-lines)。
dired-sort-toggle-or-edit)。
dired-listing-switchesとして用いて
diredバッファを更新する。
g(revert-buffer)コマンドを実行すると、
表示されているファイルやディレクトリの変更に基づいてdiredバッファを
更新します。
このコマンドは消されたファイルに対するものを除いて
すべての印やフラグを保存します。
隠蔽されたサブディレクトリも更新されますが、隠蔽されたままです。
いくつかのファイルだけを更新する場合には、
l(dired-do-redisplay)と打ちます。
このコマンドは、後続のn個のファイル、
印を付けたファイルがあればそれらのファイル、
カレントファイルのいずれかに作用します。
それらを更新するとは、それらのファイルの現状をファイルシステムから取得し、
それを正しく反映するようにバッファを更新します。
lをサブディレクトリのヘッダ行で実行すると、 対応するサブディレクトリの内容を更新します。
指定したファイルの表示行を削除する、
つまり、ファイルそのものではなく行だけを削除するには
k(dired-do-kill-lines)と打ちます。
数引数nを指定すると、
このコマンドは、後続のn個のファイルに作用します。
さもなければ、印を付けたファイルに作用します。
削除するファイルの表示行がディレクトリだった場合には、 そのディレクトリの内容もバッファから削除されます。 サブディレクトリのヘッダ行でC-u kと打っても、 diredバッファからサブディレクトリの内容を削除できます。
gコマンドは、このようにして削除した表示行を画面に呼び戻すことが できますが、サブディレクトリに関してはできません。 各サブディレクトリを再度挿入するにはiを使う必要があります。
diredバッファ内のファイルは、通常、
ファイル名のアルファベット順に並んでいます。
diredは日付/時間順に並べ替えることもできます。
diredコマンドs(dired-sort-toggle-or-edit)は、
これら2つのソート方法を切り替えます。
diredバッファのモード行には、アルファベット順と日付/時間順の
どちらで現在表示しているかが示されます。
C-u s switches RETで、
変数dired-listing-switchesに新しい値を設定できます。
findプログラム
findプログラムを使ってファイルを選べば、
diredバッファ上に表示する一連のファイルをもっと柔軟に選択できます。
ワイルドカードに一致する名前のファイルを探索するには M-x find-name-diredを使います。 このコマンドは、2つの引数directoryとpatternを読み取り、 directoryにあるすべてのファイル、 あるいは、そのサブディレクトリ下にあるpatternに一致する名前のファイルを 選択します。
このようにして選択されたファイルはdiredバッファに表示され、 このバッファではもとのdiredコマンドを使えます。
ファイル名ではなくファイルの内容で調べたい場合には、
M-x find-grep-diredを使います。
このコマンドはミニバッファから2つの引数directoryとregexpを
読み取ります。
directoryにあるすべてのファイル、
あるいは、regexpに一致するものを含む一連のサブディレクトリを選択します。
このコマンドは、プログラムfindとgrepを実行して動作します。
section Emacs下でのコンパイラの実行のM-x grep-findも参照してください。
Emacsの正規表現ではなくgrepの正規表現を書くことを忘れないでください。
このような一連のコマンドの中でもっとも一般的なコマンドはM-x find-diredで、
findが検査に用いる任意の条件を指定できます。
このコマンドはミニバッファから2つの引数directoryとfind-argsを
読み取ります。
検査すべき条件を指示するfind-argsを渡して、
directoryにおいてfindを実行します。
このコマンドを使うには、findの使い方を知っている必要があります。
これらのコマンドが出力する表示形式は変数find-ls-optionで
制御されます。
デフォルトは、lsに使うオプションとして`-ld'を指定します。
出力形式が壊れて見える場合には、
この変数の値を変更する必要があるかもしれません。
Go to the first, previous, next, last section, table of contents.