• ベストアンサー

if文について

ysk6406の回答

  • ベストアンサー
  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.3

OKです。 No.2 の回答にある -s とは、「ファイルが存在し、かつサイズが0より大きい」ことを判定するためのものなので、これだと0バイトのファイル(ごく普通に存在します)はチェックできないことになってしまいます。 用途にもよりますが、普通は -e でいいのではないでしょうか? なお、UNIX によっては、-e のないものもあります。その場合は、-r(読み取り可能なら真)などを使うといいでしょう。 読み取り可能に設定しないファイルもたまにあるので、万全を期すなら、-w(書込み可能)や -x(実行可能)も OR 条件で指定してチェックするといいです。

ami_mizuno
質問者

お礼

有り難うございます。 今仕事で急にシェルを組むことになって、解読していたんですが 前後の文を読んで「こうじゃないかなー」との推測しかつかなかったもので。 そしてさらに詳しい解説までしていただいて、本当に有り難うございます。

関連するQ&A

  • [if文]ファイル/ディレクトリの存在有無について

    [if文]ファイル/ディレクトリの存在有無について教えて下さい。 「あるディレクトリ配下にファイル、ディレクトリがない場合、 エラーを出力。」を目的に以下のシェルを作成しました。 if [! -f $DIR/* -a ! -d $DIR/*] nodataend fi しかし、あるディレクトリ配下に複数のファイルが存在すると正常に処理されません。 この場合、どのような条件で指定すればいいのでしょうか。 個人的には条件で指定している*が問題ではないかと思います。 宜しくお願いします!

  • シェルの変数の仕様

    シェルで、次のようにコマンドを実行すると指定した拡張子のファイルだけ消せます。 # rm ./{*.csv,*.exe} rm: remove 通常の空ファイル `./test.csv'? rm: remove 通常の空ファイル `./test.exe'? しかし、パスを変数にするとなぜかうまくいきません。 # src_dir=. # file={*.csv,*.exe} # rm $src_dir/$file rm: cannot lstat `./{*.csv,*.exe}': そのようなファイルやディレクトリはありません 正しい使い方を教えてください。 宜しくお願い致します。

  • Kshでエラー(no closing quote):原因わかりません

    下記のようなファイル管理シェルをLinuxで作っているのですが、 test.sh[42]: no closing quote というエラーがでて解決できません。 何が原因なのでしょうか。どなたかご教授ください。宜しくお願い致します。 #!/bin/ksh #KAKUNIN_DATEから更新されているファイルをリスト KAKUNIN_DATE="10 Jul" #これを随時更新 TODAY=`date +"%x"` TODAY_YMD=`date +"%j"` START_YMD=`date --date="${KAKUNIN_DATE}" +"%j"` let n=TODAY_YMD-START_YMD #対象ディレクトリ CHK_DIR=$1 if [[ -d $CHK_DIR ]];then continue else echo "Not Dir:$CHK_DIR" exit fi #検索文字列 CHK_STR=$2 if [[ $CHK_STR = "" ]];then echo "Pls set check-string" exit fi #ファイル形式 NAME_STR=$3 if [[ $NAME_STR = "" ]];then echo "Pls set file type(if all then \"*\")" exit fi ######## メイン echo "-------------------------------------------------" echo "調査日:$TODAY 検索文字列:$CHK_STR 調査:$CHK_DIR 形式:$NAME_STR - $KAKUNIN_DATE から今日まで($n日内)に更新されたファイル" echo "ヒット,サイズ,更新日,ファイル名" find $CHK_DIR -name "$NAME_STR" -type f -mtime -$n -print| while read StrLine do if [[ `cat $StrLine | grep $CHK_STR` = "" ]];then echo `ls -l $StrLine | awk '{print 0","$5","$6,$7,$8","$9}'` else echo `ls -l $StrLine | awk '{print 1","$5","$6,$7,$8","$9}'` fi done

  • シェルスクリプト(if文)

    引数で指定されたファイルがあるばあい、ファイルの末尾5行を表示し、ない場合は「ファイルパス in not found」と表示されるシェルスクリプトを作成したい。 それで偽のときのの実行結果がうまくいきません。 どこを修正すればいいでしょうか? 回答の程宜しくお願い致します。 実行結果 [root@Manabe root]# . filefile /etc/pass tail: /etc/pass: そのようなファイルやディレクトリはありません ソース #!/bin/bash if [ -f$1 ];then tail -5 $1 else echo "$1 in not found" fi

  • dirに追加されるファイルを別のdirにコピーする

    質問させて頂きます。 OSはFreeBSDです。 あるディレクトリ(以下、dir1)にファイルが作られていきます。ファイルは不定期に作られ、また不定期に削除されていきます。このdir1にファイルが作られたら、別のディレクトリ(以下、dir2)にコピーしていきたいのです。つまり削除されるファイルを別のところにためておきたいのですが、どのような方法があるのかわかりません。 勉強していますが、シェルスクリプトも殆ど書いたことがないので、方法やコマンドなどが想像出来ません。ヒントだけでもいいので教えていただけませんか?

  • BシェルのIF文について。。

    BシェルのIF文について。。 現在、Bシェルで特定のファイルが存在する場合、ファイル名の末尾をカウントアップ(ファイル名_01)しようと考えております。 以下がスクリプトの内容なのですが fiが無効というエラーが出てしまいます。。。 対応が分かる方がいらっしゃれば教えてください。。 if [ -f aaa_00.txt] then touch aaa_001.txt fi よろしくお願いします。

  • if文の使い方

    自分では解決できない為、質問させていただきます。 Webサイトの任意の場所に下のスクリプトを埋め込み、 ./testディレクトリに7日以内に更新ファイルがあり、かつファイル名にrrrという文字列がなければWEBサイトの埋め込んだ場所にABCDEFGHIJKと表示させることを考えています。 よって7日以内に更新があってもファイル名にrrrが含まれる場合や、 7日以内に更新がない場合はwebサイトにABCDEFGHIJKと表示させたくありません。 自分で書いてみた下記スクリプトではいつでもABCDEFGHIJKと表示されてしまいます。 ※下記9行目の$latestfilenameをechoするとちゃんと最終更新ファイル名を表示してくれます。(ここまでは上手くいっています) <? $dir = opendir("./test"); $latestfile=0; while (($fnm = readdir($dir)) !== false) { if($fnm == "." || $fnm == "..") continue; $ftime = filemtime("./test/$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename = $fnm; } } if($fnm == "." || $fnm == "..") continue; if(preg_match("/rrr/",$latestfilename)){ printf(""); break; } else if($nowdate - $fftime < 604800) { printf("ABCDEFGHIJK"); } else if($nowdate - $fftime > 604800) { printf(""); } closedir($dir); ?> 何がおかしいのかご教授ください。

    • ベストアンサー
    • PHP
  • Bash スクリプトでファイルの検出方法を教えてください。

    ファイルやディレクトリが無いこと(消去できたこと)を、検出したいと思います。 試しに、次のプログラムを作ってみました。 f_chk() { if [ -f "$1" ]; then echo $1 "ファイルはあった → NG" return 1 else echo $1 "ファイルは無かった → OK" return 0 fi } f_chk "/mnt/hoge/*.INF" exit ------------------------------- "if [ -f "$1" ];"でファイルの有無を判定させようとすると、明確にファイル名を指定しなければ成りません。 今、ファイル名の指定を「*.INF」とすると、正しい判定をしません。 これに変わる方法を教えてください。

  • シェルスクリプトの if文について

    if文でずっと悩んでいます。 testIF.shというファイル名で作成したif文を実行したのですが、(kシェル) 「./testIF.sh[3]: testCount: 見つかりません。」 作成したif文は↓です。 ---------------------------------------- let testCount=0 if ( testCount > 0 ) ; then echo "OK!!" fi exit ---------------------------------------- 何がいけないのでしょうか。 まったく分かりません。

  • AIXでの指定ディレクト以下の全ファイル削除について

    お世話になっております。 AIX5.1のOSで、指定ディレクトリ以下(ファイルのみしか存在しない)ファイルを全て自動で削除するようにシェルを組むことは可能でしょうか? 以下のようにシェルを作成しましたが、ファイル数が多すぎるらしくエラーで削除することができませんでした。 ちなみに、ファイル数は約4000以上あります。 rm -f /(指定ディレクトリ)/* ファイル数が多くても削除できるようにしたいのですが、何かよい方法はありますでしょうか? 以上宜しくお願い致します。