質問

2007年04月09日 21時59分
  • ファイル集計するシェルスクリプトがうまく動かない

情シスのオープンナレッジ『Syszo』サービス終了のお知らせ

質問

ファイル数とファイル容量を集計する以下のようなスクリプトを書いたのですが、
除外対象ディレクトリまで集計してしまって困っています。

!/bin/sh

list=ls /home/test/

for user in $list;do
echo $user
find /home/test/$user -path ’/home/test/$user/include’ -prune -o -type f -printf "%s\n" |perl -ne ’$i++; $byte += $_; $str = "\r$i files, $byte byte"; print $str’
echo ""
done

■やりたいこと
/home/test配下にあるディレクトリごとに、
ファイル数とファイル容量を集計したい。
ただし、/home/test/*/include配下は集計しないようにしたい。

findの動作がシェルによって違うのだと思い、
bashでも試しましたが、駄目でした。。。

以下のようにコマンドラインで直接叩くと、正しく処理されます。
find /home/test/user -path ’/home/test/user/include’ -prune -o -type f -printf "%s\n" |perl -ne ’$i++; $byte += $_; $str = "\r$i files, $byte byte"; print $str’

どこか記述におかしいところがありますでしょうか。

1件の回答があります

回答

こんにちは
早速ですが6行目

find /home/test/$user -path ’/home/test/$user/include’ -prune ・・・
find /home/test/$user -path "/home/test/$user/include" -prune
ダブルクォーテーションに変えてみてはいかがでしょうか。
検証していませんので他に原因があるかも知れません。すみません。

「ファイル数とファイル容量を集計する」のであれば
$ du -a /home/test//include
でサイズを表示し、
$ du -a /home/test/
/include|wc -l
で行数を数えてファイル数を数えるのもありかなと思います。
フィルタは必要になりますが。

2007年04月10日 10時05分

あなたもコメントしましょう!