More than 1 year has passed since last update.

ファイル列挙する際によく使われる手法がファイルグロブだと思います。グロブを使うと簡単に特定ファイルを絞り込んだりできます。特に zsh の場合、bash のものから比べ大きく拡張されているため、グロブを習得するのは zsh の操作を習得するのに大変寄与すると思います。

ファイルグロブで列挙する

echo *

簡単な奴だとこんな感じです。修飾子がないとカッコ悪いですが。ドットファイルも指定する場合は以下のようにします。

echo {*,.*}
# または
setopt DOT_GLOB
echo *

後者の場合、サブプロセスで実行する場合、現在のプロセスに影響を与えないのでいいですが、source して使う場合など、現在のプロセス上に影響を与える形で利用する場合、無名関数化して setopt localoptions にしてやる必要があります。

mapfile で列挙する

グロブを使わないやり方です。

zsh では多くの便利機能が外部モジュールとして切り出されているのですが、そのひとつに zsh/mapfile というものがあります。これは mapfile という連想配列が使えるようになるのですが、これが非常に便利です。

zmodload zsh/mapfile

echo ${(k)mapfile}

mapfile はキーにカレントディレクトリのファイル(... を除くドットファイルも含む)が、値にそのファイルの中身が格納されている便利変数です。

echo "${mapfile[some_file]}"

クォートしなければ改行などが失われるので気をつけてください。