if
ステートメントで bash を使用してファイルが作成された経過時間 (秒単位) をテストしようとしています。変更ではなく、作成日が必要です。
find
withのようなコマンドを使用せずに、これを行う方法はありgrep
ますか?
残念ながら、作成時間の質問には答えられませんが、最終変更時間については、次を使用して、ファイル名が最後に変更されてからのエポック日付を秒単位で取得できます。
date --utc --reference=filename +%s
したがって、次のようなことができます。
modsecs=$(date --utc --reference=filename +%s)
nowsecs=$(date +%s)
delta=$(($nowsecs-$modsecs))
echo "File $filename was modified $delta secs ago"
if [ $delta -lt 120 ]; then
# do something
fi
等..
更新 これを行うためのよりエレガントな方法 (ここでも変更時間のみ):ファイルが x 時間以上前に作成されたかどうかを bash で確認するにはどうすればよいですか?
現時点で見つけた最良の答えは次のとおりですが、それは変更時間のみです。
expr `date +%s` - `stat -c %Y /home/user/my_file`
システムに以下がある場合stat
:
modsecs=$(stat --format '%Y' filename)
そして、 Joelの答えのように数学を行うことができます。
--full-time で ls を使用できます
file1="file1"
file2="file2"
declare -a array
i=0
ls -go --full-time "$file1" "$file2" | { while read -r a b c d time f
do
time=${time%.*}
IFS=":"
set -- $time
hr=$1;min=$2;sec=$3
hr=$(( hr * 3600 ))
min=$(( min * 60 ))
totalsecs=$(( hr+min+sec ))
array[$i]=$totalsecs
i=$((i+1))
unset IFS
done
echo $(( ${array[0]}-${array[1]} ))
}