- 締切済み
cshスクリプトでの質問です。
ちょっとスクリプトを作ろうとしたのですが、行き詰ってしまいました。 下記の要件を満たすにはどうすればよいでしょうか。ご教示ください。 環境:WinXP Pro, Windows Services for UNIX 3.5 言語:csh 目的: /dev/fs/C/hogehoge/YYYYMMDD/配下にjpgファイルを複数保存している。 これに対して、jpgファイル数の日付別一覧を出力したい。 条件: 1.hogehogeディレクトリ配下には複数の日付ディレクトリが存在するものとする。 ※また、hogehogeディレクトリ配下には、YYYYMMDD以外の名前のディレクトリもあるが、 これらのディレクトリに対しては、特に何らかの情報を取得する必要は無し。 2.cshを実行するときに引数として、jpgファイル数を取得する期間を指定したい。 各ディレクトリに対するjpgファイル数自体の出力部分については ls /dev/fs/C/hogehoge/YYYYMMDD/*.jpg | wc -l で数えられるかと思うのですが、日付ディレクトリの取り扱いに困っています…よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
ちなみにshの場合 #!/bin/sh cd /dev/fs/C/hogehoge/ for i in `ls` do echo ${i} >> out.txt ls ${i}/*.jpg | wc -l >> out.txt echo " " >> out.txt done って感じでしょうか
- notnot
- ベストアンサー率47% (4900/10358)
えーとまず、cshのスクリプトファイル機能は、.cshrc を書く程度の機能しかないので、何らかの処理をするスクリプトを書くなら、sh か bash の方が良いです。SFUはアンインストールしちゃったので忘れましたが、cshしかなかったんでしたっけ。まあ、この程度ならぎりぎり書けると思います。 引数1に開始日、引数2に終了日を、それぞれ数字8桁で指定するとして、引数のエラーチェックを省くと、 cd /dev/fs/C/hogehoge foreach d ([1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) if ( $1 <= $d && $d <= $2 ) echo $d : `echo $d/*.jpg | wc -l` end 日付ディレクトリの下に、*.jpg のファイルが1つもない場合はエラーメッセージが出ます。これを出ないようにするにはさらに処理が要ります。エラーを気にしないのが楽です。
- inflate60
- ベストアンサー率37% (3/8)
ls /dev/fs/C/hogehoge/????????/*.jpg | wc -l とすればどうしょうか。 YYYYMMDD以外の8文字のディレクトリがあれば、それも対象になって しまいますが。
ls /dev/fs/C/hogehoge/で日付のリストを取り、 ファイルリストの引数に与えてやればいいと思います。 ただ、shならすぐ書けるんですがcshはちょっと自信がないのでパスさせてもらいます
- inflate60
- ベストアンサー率37% (3/8)
YYYYMMDDというディレクトリが実際にあるのですか? それとも 20070701 20070702 20070703 … というように、日別のディレクトリがいくつもあるのですか。
補足
説明不足でした。申し訳ありません。 後者のように、 20070701 20070702 20070703 … となっています。 さらにそのディレクトリの下に、複数のファイルが保存されている状況です。 よろしくお願いします。