2009-07-30 12 views

答えて

16

ファイルの最終更新時刻はstat、現在の日付はdateです。あなたは「エポックからの秒」でそれらを得るために、両方のためのフォーマット文字列を使用することができます。

current=`date +%s` 
last_modified=`stat -c "%Y" $file` 

すると、それが条件でそれを置くために非常に簡単です。例:

if [ $(($current-$last_modified)) -gt 180 ]; then 
    echo "old"; 
else 
    echo "new"; 
fi 
+0

は、その日付に注意してください+%sは – Karl

+0

動作しませんか? OS Xでは 'stat -f%m'を使用しますが、一部のLinuxフレーバでは' stat -f'はファイルシステム情報を表示します。ほとんどのシステムは 'date -r" $ file "+%s'をサポートしていますが、OS Xではうまくいきません。楽しいもの:) – Haravikk

3

文はあなたの特定のシェルに依存するが、日付のコマンドがない場合はstatコマンドは、最終更新時刻

stat -c %y <filename> 
4

にあなたにこの構文を与えます。私はbashを使う。必要に応じて変更してください。

if [ $(($(date +%s) - $(date +%s -r <file>))) -le 180 ]; then 
    # was modified in last three minutes 
else 
    # was not modified in last three minutes 
fi 

+%s(重要なビットは、それが秒単位の整数であるということです)出力にUNIX時刻を日付に指示します。 statを使用してこの情報を取得することもできます。コマンドstat -c %Y <file>は同等です。使用可能な時間が秒単位になるように、%Yではなく%yを使用してください。

0

ファイルタイムスタンプの変更は、実際にコピーに成功したことを意味しません。
ファイルが破損しているか、ファイルシステムの空き容量がなくなった場合は、
が表示されます(確認が必要です)。

私はあなたの要件の正確なコンテキストを取得しません。
cpを発射した場合、それは完了して戻ります。動作中は戻りません。
したがって、成功(成功の終了コードを含む)の戻り値は成功の良い指標ではありませんか?

cp操作ではどうやって部分的に終了するのですか?
または、cpファイルのリストをループするバッチです...
いくつかの手助けが役立ちます。

+0

cpは1つのスクリプトで実行され、別のスクリプトで検証されます。だから存在は中央のcpを止めません。ところで、どのように私はcpの存在するコードを確認することができますか?ありがとうございます – derrdji

+0

*取得して確認してください – derrdji

2

ファイル名が最後の3分間に変更されている場合、ファイル名を出力できます。どのように広くサポートされているのstat -c%Y` `であるSolaris上のユーザーのために

find file1 -maxdepth 0 -mmin -3 
関連する問題