「覚え間違い」を教えてください!

■前提例
./public_html/rails/modules/abcde/cache/hoge/file1
./public_html/rails/modules/abcde/cache/file2
./public_html/ruby/modules/wiki/private/cache/file3
./net/cache/file4
./n/abcde/cache/file5
 :
以下略

■期待しているのは、下記二つのディレクトリを検出し、かつそのディレクトリ以下のファイル数を、ディレクトリ毎に表示させたいのですが、
2./public_html/rails/modules/abcde/cache/
1./n/abcde/cache/
 :
もしくは、
2./public_html/rails/modules/abcde/cache/hoge/file1
2./public_html/rails/modules/abcde/cache/file2
1./n/abcde/cache/file5
 :

■実際に下記コマンドを実行すると、
find . -type f -regex '.*/abcde/cache/.*' -print | wc -l
4503
という数値(恐らくファイル数?)が返ってくるのみです。

ググッてみて、
find . -type f -regex '.*/abcde/cache*/.*' | xargs wc -l
find . -type f -regex '.*/abcde/cache/.*' -print | xargs wc -l
find . -type f -regex '.*/abcde/cache/.*' -exec wc -l \{\} \;
とか色々試してみたのですが、
恐らく行数?が表示されるようで、自分が期待した結果を得ることが
できません。

条件で検出したディレクトリ以下のファイル数を、ディレクトリ毎に表示させるには、
どうしたらよいのでしょうか。

A 回答 (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

この回答への補足

(前回に引き続き)ご回答いただき、ありがとうございます。
おかげで、自分が望む結果を得ることができました。
(簡単なスクリプトでこんなことも出来るんだ、とちょっと感動しました)

<補足>
>■期待しているのは、下記二つのディレクトリを検出し
説明が悪かったのですが、実際には、/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/
          :  
         以下略 

それぞれのディレクトリ以下にあるファイル数の一致を
無事確認することができました。

ありがとうございました!

補足日時:2010/01/30 12:04
    • good
    • 0

すみません。

test4.txt はこちらで動作確認したときに使ったものです。
削ってください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報