このスレッドは未解決です(解決したらこちらで解決済にしてください)
<<戻る

空ディレクトリの検査 このメッセージに返信する
日時: 2011/06/17 14:34
名前:
URL:
bashで空ディレクトリの検査スクリプトを作成しているのですが、
特定のディレクトリのみを検査し、その配下にある
空ディレクトリは検査対象から除外するにはどうすればいいのでしょうか?

/home/test/public_html/    ←topのみを検査対象
/home/test/public_html/b   ←除外
/home/test/public_html/a   ←除外

■空のディレクトリを検索
# find /home/*/public_html/ -type d -empty
/home/test/public_html/b
/home/test/public_html/a
記事編集 編集

Page: | 1 | 2 |

Re: 空ディレクトリの検査 このメッセージに返信する
日時: 2011/06/18 22:30
名前:
URL:
# find /home/*/public_html/ ! -name a ! -name b -type d -empty
/home/test1/public_html/as
/home/test1234/public_html/
/home/test2/public_html/

# find /home/*/public_html/ -maxdepth 1 -type d -empty
/home/test1/public_html/b
/home/test1/public_html/a
/home/test1/public_html/as
/home/test1234/public_html/
/home/test2/public_html/

上記の結果が得られました。

対象外となるものが不特定のディレクトリ(a or b とは限らない)のもので、
さらには、そのディレクトリにindex.html等のファイルがある場合も含むものも
除外することはできますか。

/home/test/public_html/    ←topのみを検査対象
/home/test/public_html/index.html ←index等のファイルがある場合検査しない(正常)
/home/test/public_html/ ←index等のファイルがない場合検査対象(異常)
/home/test/public_html/b   ←検査対象除外
/home/test/public_html/a   ←検査対象除外


# find /home/*/public_html/ ! -name "*.html" -type f ! -name "*" -type d -empty

こうした場合、何も表示されなくなりました。
記事編集 編集
Re: 空ディレクトリの検査 このメッセージに返信する
日時: 2011/06/19 09:48
名前: ペングイン
URL: http://blog.trippyboy.com
申し訳ないです。
strangerさん、そうですね(^^;)

「/home/test/public_html/」や「/home/test2/public_html/」を対象として
もしその「public_html」が空だったら。という事でしょうか。

find /home/* -name 'public_html' -type d -empty

なんてどうでしょうか。
記事編集 編集
Re: 空ディレクトリの検査 このメッセージに返信する
日時: 2011/06/22 07:51
名前: 新高校生
URL:
>対象外となるものが不特定のディレクトリ(a or b とは限らない)のもので、
>さらには、そのディレクトリにindex.html等のファイルがある場合も含むものも
>除外することはできますか。
>
>/home/test/public_html/    ←topのみを検査対象
>/home/test/public_html/index.html ←index等のファイルがある場合検査しない(正常)
>/home/test/public_html/ ←index等のファイルがない場合検査対象(異常)
>/home/test/public_html/b   ←検査対象除外
>/home/test/public_html/a   ←検査対象除外

いまいち条件がわからないのですが、/home/*/public_html/ 直下に
index.htmlもindex.htmもindex.phpも無いユーザーを表示するスクリプトを作ってみました。
(ただし元々public_htmlの無いユーザーディレクトリは無視しています)

#!/bin/bash
USERLIST=`ls /home`
for user in $USERLIST;
do
s="/home/${user}/public_html"
if [ -e $s ]; then
if [ ! $(ls -A $s | grep 'index.html\|index.htm\|index.php') ]; then
echo "${s} ... Not Existing index.xxx"
fi
fi
done

bashは難しい、よくわかりません。perlやphpで作ると簡単かも。
記事編集 編集
Re: 空ディレクトリの検査 このメッセージに返信する
日時: 2011/06/22 19:49
名前: 長崎人
URL:
>bashで空ディレクトリの検査スクリプトを作成しているのですが、
>特定のディレクトリのみを検査し、その配下にある
>空ディレクトリは検査対象から除外するにはどうすればいいのでしょうか?
>
>/home/test/public_html/    ←topのみを検査対象
>/home/test/public_html/b   ←除外
>/home/test/public_html/a   ←除外
>
>■空のディレクトリを検索
># find /home/*/public_html/ -type d -empty
>/home/test/public_html/b
>/home/test/public_html/a

次でどうですか?

#!/bin/bash

###########################
### サブルーチン
###########################

##
## ファイルをひとつも含んでいないディレクトリを再帰的に
## 検索します。
##
function scanDir() {
dirpath=$1
subFileCnt=`find ${dirpath} -type f |wc -l`
if [ ${subFileCnt} = 0 ] ; then
echo "${dirpath}"
else
for subdir in `find ${dirpath} -mindepth 1 -maxdepth 1` ; do
scanDir ${subdir}
done
fi
}

###########################
### メイン処理
###########################
while [ $# -gt 0 ] ; do
scanDir $1
shift;
done


【解説】
※findやwc、while文などの使い方は書籍やmanページを
 参照してください。以下は処理の流れの解説です。

1)メイン処理では検索の基点となるディレクトリの
 パスを複数受け取り、それをひとつずつscanDir
 関数に渡します。

2)scanDir関数は
 2.1)「find ${dirpath} -type f |wc -l」を使って、
   指定ディレクトリ以下にファイルが何個あるか
   数えます。(サブディレクトリ以下からも再帰的に
    ファイルを探して、その総数を数えます。)
 2.2)ファイル数がゼロだったら「echo "${dirpath}"」で
   そのパスを出力します。またそのディレクトリの
   下にあるパスの検索はそれ以上行いません。
 2.3)ゼロではなかった場合は直下のサブディレクトリ
   に対してもう一度「scanDir」を実行します。
   このときはfindの引数にmindepthとmaxdepthを
   指定することで、検査中のディレクトリの直下
   のサブディレクトリだけをscanDirに渡します。


ただし、このスクリプトはディレクトリ階層が深い場合
はとても低速です。もうちょっとしっかりしたプログラ
ム言語で書くと格段に高速に動作するコードを書くこと
ができます。
記事編集 編集

Page: | 1 | 2 |

件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

※質問を投稿後に自己解決された場合は、原因と行った対処を具体的に書き込み下さるよう、よろしくお願いします。

- WEB PATIO -