- ベストアンサー
指定ディレクトリ以下のファイル数をディレクトリ毎に表示させる方法
- 指定ディレクトリ以下のファイル数をディレクトリ毎に表示させたい場合、findコマンドを使用します。
- findコマンドを使って、指定ディレクトリ以下のファイルを検索し、それぞれのディレクトリごとにファイル数を表示することができます。
- 特定のディレクトリ以下のファイル数を確認するためには、findコマンドで対象ディレクトリを指定し、-type fオプションでファイルのみを検索します。そして、-execオプションを使用してwc -lコマンドを組み合わせることで、ファイル数をカウントすることができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
http://oshiete1.goo.ne.jp/qa5632040.html の続きですね。 >■期待しているのは、下記二つのディレクトリを検出し >./public_html/rails/modules/abcde/cache/ >./n/abcde/cache/ 探す場所がわかっているのなら、 find の開始ディレクトリに指定すれば、それより下だけを探します。 -regexはabcde/cacheを探すために使ったものですし、今回のやり方だと常に真なので削ります。 find ./public_html/rails/modules/abcde/cache ./n/abcde/cache -type f -print >かつそのディレクトリ以下のファイル数を、ディレクトリ毎に表示させたい sedで開始ディレクトリだけ取り出す→sortで並びかえる→uniq に -cオプションつけて重複行を数える。 としてみました find ./public_html/rails/modules/abcde/cache ./n/abcde/cache -type f -print | sed 's/^\(\.\/public_html\/rails\/modules\/abcde\/cache\/\|\.\/n\/abcde\/cache\/\).*$/\1/' test4.txt | sort | uniq -c abcde/cacheがそれぞれに下に含まれていないならもうちょっと簡単に find ./public_html/rails/modules/abcde/cache ./n/abcde/cache -type f -print | sed 's/^\(.*\/abcde\/cache\/\).*$/\1/' test4.txt | sort | uniq -c ここまでくると、シェルスクリプトやperl,awk等を使ったほうがすっきりしそうです。 #!/usr/bin/sh for i in _html/rails/modules/abcde/cache ./n/abcde/cache do echo "`find $i -type f | wc -l` $i" done
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
すみません。 test4.txt はこちらで動作確認したときに使ったものです。 削ってください。
補足
(前回に引き続き)ご回答いただき、ありがとうございます。 おかげで、自分が望む結果を得ることができました。 (簡単なスクリプトでこんなことも出来るんだ、とちょっと感動しました) <補足> >■期待しているのは、下記二つのディレクトリを検出し 説明が悪かったのですが、実際には、/abcde/cache/を 0~複数個探したいという意図でした。 >test4.txt このtest4.txt は何を意味しているのでしょうか? 実際に試したところ、下記のようになりました。 sed: can't read test4.txt: No such file or directory >abcde/cacheがそれぞれに下に含まれていないなら それぞれに下に含まれていないなら、 この部分の意味がよく分かりませんでした。 ■最終的に、試したのが、下記です。 find . -type f -regex '.*/abcde/cache/.*' -print | sed 's/^\(.*\/abcde\/cache\/\).*$/\1/' | sort | uniq -c 85 ./public_html/aa/modules/abcde/cache/ 13 ./public_html/bb/modules/abcde/cache/ : 以下略 それぞれのディレクトリ以下にあるファイル数の一致を 無事確認することができました。 ありがとうございました!