2017-01-19 9 views
0

私は、この15分間でファイルが作成または更新されたかどうかをチェックし、存在しない場合は作成します。しかし、ファイルが存在しない場合、findでエラーが発生します。 私が間違っていることを教えてもらえますか?シェル内のifステートメントを見つける

if [ -n "$(find test.txt -mmin +15)" ] 
then 
echo "old file found. needs touch up" 
touch test.txt 
else 
echo "File modified in the last 15 mins jeez" 
fi 

しかし、これはうまくいかないようです。 find: test.txt': No such file or directoryエラーが発生します。私は間違って何をしていますか?

答えて

1

findは、見た目のパスとして「通常の」引数(-で始まらないもの)を解釈します。それらはディレクトリまたは単一のファイルにすることができますが、存在する必要があります。おそらくtest.txtという名前のファイルのために、現在のディレクトリに見てみたい:

if [ -n "$(find . -name test.txt -min +15)" ] 

findの実装によっては、あなたが.引数を省略することができます。)

ファイルを取得することを確認するには

if ! [ -e test.txt ] || [ -n "$(find . -name test.txt -min +15)" ]; then 
+0

まだ動作しませんでした。 – user3164754

+1

「まだ動作しませんでした」は何が間違っているかを診断するのに役立ちません。あなたが報告しているエラーメッセージの迷子のアポストロフィは奇妙です。 – chepner

+0

Hmm。このスニペットを実行する前にファイルに触れるとうまくいきます。したがって、ファイルが手前に存在する場合は、それが動作します。しかし、ファイルを作成したりタッチしたりしなければならない場合はしません。 – user3164754

0

は、たぶん、あなたが何をすべき:それはまだ存在しない場合は作成し、同じようにも存在するかどうかのチェックを追加

name="test.txt" 
if [ ! -f "$name" ] && [ -n "$(find "$name" -mmin +15)" ] 
then 
    echo "Old file $name found. Needs touch up" 
    touch "$name" 
else 
    echo "File $name modified in the last 15 mins jeez" 
fi 

または多分:

name="test.txt" 
if [ ! -f "$name" ] 
then 
    echo "File $name does not exist" 
elif [ -n "$(find "$name" -mmin +15)" ] 
then 
    echo "Old file $name found. Needs touch up" 
    touch "$name" 
else 
    echo "File $name modified in the last 15 mins jeez" 
fi 

それが存在しているとして検出された後にファイルを削除することができた時のテストの間に小さなウィンドウがあります。それは本当の問題ではありませんが、理論的には起こり得ることに注意してください(また、スクリプトを十分頻繁に実行し、ファイルが失われてしまった場合は、最終的に発生します)。

関連する問題