■前提例
./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で質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qsolaris9 ディレクトリ内のファイル数をカウントする方法

Solaris9を使用しておりますが、
ディレクトリ内のファイル数をカウントしたいと考えておりますが可能でしょうか?

ディレクトリは階層的になっており、各々のディレクトにいくつのファイルが存在しているのかを調べたいと思っております。
(duコマンドのような感じでサイズではなく、ファイル数が分かればなぁ・・ といった感じです。)

宜しくお願い致します。

Aベストアンサー

こんにちは。

 findを使って、サブディレクトリのファイルリストを作成し、awkで各ディレクトリごとにごとのファイル数をカウントすればよいと思います。

 awkはプログラム言語に近い機能を持っているので、一口で説明しきれないので、マニュアルや解説本を参照してください。

では。

Qフォルダの中にあるファイルの数を数えたい!

宜しくお願いいたします。

サーバー上のフォルダに、ワードのファイルがたくさん
あるのですが、これを簡単に数える方法は内でしょうか?

ファイルが数百個あるので一つ一つ数えるのは時間がかかり・・・。

教えてください。

宜しくお願いします

Aベストアンサー

フォルダに分かれているならフォルダを右クリックしてプロパティを見れば分かります。
フォルダ無しでファイルだけの場合はすべてを選択すればエクスプローラのステータスバーに表示されます。
ステータスバーの表示方法は
http://121ware.com/qasearch/1007/app/nec.jsp?003539

Qポートの80と443

こちらのサービス(https://secure.logmein.com/)を利用すると、インターネットを見られるサーバーのポートの80と443が空いていればルータやファイアウォールに特段の設定なく外部からサーバーを操作できるそうですが、逆にサーバーのポートの80や443を空けることには何か危険性があるのでしょうか。

Aベストアンサー

ポート80は一般的なHTTP、ポート443はHTTPSです。
この2つのポートがあいていなければインターネット接続(WEBブラウジング)は出来ません。
ですから、ほとんどのファイアウォールでこのポートは開いています。(インターネット接続を制限している社内LANでは当然閉じていますが)

ちなみに、よく使うポートとしてはFTPで20、21、SMTP(送信メール)で25、受信メールPOP3で110あたりです。セキュリティポリシー上、この辺は制限される事も多いですが、HTTP 80、HTTPS(暗号化用)443は通常閉じません。


危険性?
WEBプロトコルを使ってFTP的なファイル転送(WebDAV)やVPN等も出来るようになっています。当然そこにはある種の危険はつきものですが、WEBブラウジングに伴う危険と大きく変わりません。ウィルス等に感染していればこの2つのポートだけでも相当危険でしょうね。

参考まで。

QLinuxでディレクトリ内の最新ファイルとファイル数を取得したいです。

ディレクトリ内にファイルが多すぎて
lsしても画面が流れてしまい困っています。

・ディレクトリのファイル数を取得したい
・ディレクトリ内の最新ファイルの日付を取得したい
のですがどうしたら良いでしょうか?

Aベストアンサー

> lsしても画面が流れてしまい困っています。
ls -ltr | more /// スペースキーで画面スクロール。
ls -ltr | tee a.txt /// a.txt にファイル名が出力されます。(リダイレクト">"よりはいいですよ。)

>・ディレクトリのファイル数を取得したい
ls -ltr | wc -l

>・ディレクトリ内の最新ファイルの日付を取得したい
ls -ltr | tail -1

QERROR1062:Duplicate entry.....というエラーが出てしまいました

いつもお世話になります。
データベースからSELECTで抽出したデータを別のテーブルにINSERTするSQLを実行したのですが、
ERROR1062:Duplicate entry.....というエラーが出てしまいました。
お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。
【実行したSQL】
INSERT INTO tblA (dataA1, dataA2, dataA3, dataA4) SELECT "9001","AA",dataB1,dataB2 FROM tblB WHERE dataB1 = 52

tblAの主キー:dataA1とdataA2
tblBの主キー:dataB1

dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。

Aベストアンサー

「ERROR 1062」は、重複データを格納しようとした場合に出力されるエラーです。
既にdataA1='9001'&dataA2='AA'という行が、tblAに格納されているのですよね?

>抽出されてくるデータは常に1件なので問題ないと期待していました

「insert ~ select ~」を実行前に、既に同じデータが格納されているのでは?
あるいはprimary keyの指定が、質問中に記された通りでなく、2件以上検索されているかです。

>何か良い方法はないものでしょうか?

何をするための方法を、聞きたいのかが分かりませんが?

Qgrepで検索文字列が完全一致した行だけ取り出す方法

grepの文字列検索で検索文字列が単語として、完全一致した行だけ取り出す方法はないでしょうか?

通常は
grep hoge hoge.txt

と打つと、hogeが含まれる行が出力されますが、今回は含まれる行ではなくて完全に文字列が一致した行だけ取り出したいのです。

例えばhoge.txtの中に
cc ghoge
kkl hogem
jjll hoge
という3行があったとしたら最後の行でhogeという文字が空白で区切られた行だけ取り出したいのです。

何かよい方法があれば教えてください

Aベストアンサー

-w オプションじゃだめですか?

参考URL:http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

よろしくお願い致します。

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Qレッドハットのバージョン確認方法

自分のサーバで使用しているREDHATのバージョン確認はどうすればいいのでしょうか?

more /etc/issue
とやっても英文しか出てきませんでした。

uname -all
でもカーネルのバージョンは出るのですが、REDHATのバージョンは出ませんでした。

Aベストアンサー

> more /etc/issue
> とやっても英文しか出てきませんでした。

その英文にはRedHatのバージョンは書いてなかったのですか?
書いていなかったとしたら、管理者により編集されている可能性
がありますね。

cat /etc/redhat-release

ではいかがでしょう?
やっぱり英文ですけど。

rpm -q redhat-release

でもいいかも


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報