次: , 前: Operating on Files, 上: Dired


26.8 diredでのシェルコマンド

diredコマンドの!dired-do-shell-command)は、 ミニバッファからシェルコマンドを読み取り、 指定したファイルすべてについてそのシェルコマンドを実行します。 diredコマンドの普通の方法で操作対象のファイルを指定できます (see Operating on Files)。 複数ファイルにシェルコマンドを適用する方法は2通りあります。

各ファイルごとにコマンドを1回実行したいが、 コマンドの最後ではなく途中にファイル名を指定したい場合にはどうするのでしょう? あるいは、もっと複雑にファイル名を指定したい場合にはどうするのでしょう? それにはシェルのループを使います。 下の例では、指定した各ファイルに対してuuencodeを実行しますが、 その出力は対応する.uuというファイルに格納します。

     for file in *; do uuencode $file $file >$file.uu; done

シェルコマンドの作業ディレクトリは、 diredバッファのトップディレクトリです。

!コマンドは、実行後に新たにできたファイルや変更された ファイルを表示するためにdiredバッファを更新することはしません。 これはシェルコマンドを実際には理解しておらず、 シェルコマンドがどのファイルを変更するのかわからないからです。 diredバッファを更新するにはgコマンドを使います (see Dired Updating)。