とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


linux:file_ls_r

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

linux:file_ls_r [2017/12/14 20:18]
linux:file_ls_r [2020/06/23 14:10] (現在)
行 1: 行 1:
 +====== ディレクトリを再帰的にたどりファイル一覧を表示する - Linux ======
 +~~socialite~~
 +<note important>この記事は2006年10月07日に書かれたものです。</note>
  
 +特定のディレクトリ配下を再帰的にたどりファイル一覧を表示などしたい。
 +
 +階層の深さが決まっていればかんたんに取得できる方法もあるが、階層はまちまちで、今後もダイナミックに変化していく。このような場合にはどうすれば良いだろうか。
 +
 +方法はいくつかある。
 +
 +  - Linuxなどのコマンドを使う
 +  - オリジナルの関数を用意する
 +  - File::Findモジュールを使用する
 +
 +===== ls -R =====
 +表示するだけであれば、お手軽なのは ls のオプションを利用する方法である。Rオプションをつけて実行すると、ディレクトリがあった場合、そのディレクトリ以下のファイルも再帰的に表示してくれる。
 +
 +以下の実行例では2階層までしかないが、最後まで面倒を見てくれる。その他のオプションと同時に利用することももちろん可能だ。 "ls -laR" などとすれば、期待通りの結果が得られる。
 +
 +<code>
 +$ ls -R
 +.:
 +200602 200603
 +
 +./200602:
 +access_log.20060215.gz access_log.20060222 error_log.20060215.gz error_log.20060222.gz
 +access_log.20060216 access_log.20060223 error_log.20060216.gz error_log.20060223.gz
 +
 +./200603:
 +access_log.20060301 access_log.20060312 error_log.20060301.gz error_log.20060312.gz
 +access_log.20060302 access_log.20060313 error_log.20060302.gz error_log.20060313.gz
 +</code>
 +
 +
 +===== ls -1 =====
 +上記の実行例だと、実行結果がプログラムなどから再利用しづらい。そういった時には "-1" オプションを利用する。
 +<code>
 +.:
 +200602
 +200603
 +
 +./200602:
 +access_log.20060215.gz
 +access_log.20060216
 +access_log.20060222
 +access_log.20060223
 +error_log.20060215.gz
 +error_log.20060216.gz
 +error_log.20060222.gz
 +error_log.20060223.gz
 +
 +./200603:
 +access_log.20060301
 +access_log.20060302
 +access_log.20060312
 +access_log.20060313
 +error_log.20060301.gz
 +error_log.20060302.gz
 +error_log.20060312.gz
 +error_log.20060313.gz
 +</code>
 +
 +===== find =====
 +これ以外にもfindを利用する方法もあるが、findはOSによって利用方法(実装)が異なる。ここではLinuxで採用されているGNU Linuxのみしか確認していないので他OSを利用する場合は動作を確認してから利用されることをオススメする。
 +<code>
 +$ find .
 +.
 +./200603
 +./200603/error_log.20060301.gz
 +./200603/error_log.20060302.gz
 +./200603/error_log.20060312.gz
 +./200603/error_log.20060313.gz
 +./200603/access_log.20060301
 +./200603/access_log.20060302
 +./200603/access_log.20060312
 +./200603/access_log.20060313
 +./200602
 +./200602/error_log.20060215.gz
 +./200602/error_log.20060216.gz
 +./200602/error_log.20060222.gz
 +./200602/error_log.20060223.gz
 +./200602/access_log.20060216
 +./200602/access_log.20060222
 +./200602/access_log.20060223
 +./200602/access_log.20060215.gz
 +</code>
 +
 +findなので特定のパターンのファイル名の物のみを表示するなどの芸当が可能(というか本来の利用方法はそれだ(笑))
 +
 +===== 関連書籍 =====
 +{{amazon>jp:B00ENEGXUU}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:B00Z5OCH1G}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:B00NXMT86Y}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:B00N4M5S8K}}
 +<html><p style="clear:both"></p></html>
 +
 +
 +
 +{{tag>CGI・Perl例文集 Linux ls find }}
 +~~socialite~~

関連ページ