アプリ版:「スタンプのみでお礼する」機能のリリースについて

Cシェルプログラムで、あるディレクトリ上にあるファイルサイズが0バイトのものを削除する処理を作りたいのです。どのようなコマンドを使って組んだらよいのでしょうか?

A 回答 (2件)

#/usr/bin/csh


foreach f (*)
if (-f $f)
if (-z $f)
rm $f
endif
endif
end

動作確認していないので、実行前に
rm $f
の部分を
echo $f
にして、目的のファイルが処理されるか確認してから実行して下さい。
間違って必要なファイルを削除してしまっても責任は取れないので、実行は自己責任で。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

質問内容と変わってしまって申し訳ないのですが、Bシェルの場合は「foreach 」は使えないのですか?

お礼日時:2003/12/11 13:50

こんにちは。

横入り失礼しますね。
Bシェルの場合は「foreach」の代わりに「for」を使います。
下の方のスクリプトをBシェルで書き換えると以下のようになります。

for f in *; do
# 一行にまとめました。csh なら ( -f $f && -z $f ) になります
if [ -f $f -a ! -s $f ]; then
rm $f
fi # if の終わり
done

[ は組み込みまたは外部コマンドの「test」と同じです。
ファイルテスト演算子の話ですが、Cシェルの
「-z」(ファイルサイズ0のファイルで真を返す)はBシェルにはありませんので、
「-s」(サイズが0より大きいファイルで真になる)演算子を否定(!)して用います。
(Bシェルにも「-z」はありますが、後続の文字列の長さが0の時真になるものです)
下の方が「-f」をつけているのはディレクトリのときはスキップするためでしょう。

chie65536 さんの echo を使ったテクニックは私もよくやります。
危険なコマンドの前に echo を置いて、生成されたコマンド列が
望み通りになっているかチェックしますね。
Turbolinux 8 の tcsh ではうまくいかなかったのですが、
bash では複数行もヒストリに入りますので、最後に

^echo^

で余分な echo を取り除いて発進!です。

・C shell については
http://hp.vector.co.jp/authors/VA012953/unix/cs_ …
・Bourne shell の強化版 bash のマニュアル
http://www.linux.or.jp/JM/html/GNU_bash/man1/bas …

参考URL:http://homepage2.nifty.com/tashikatsu/script/she …
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
上手く行きました。

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

お礼日時:2003/12/11 16:18

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