17

ifステートメントで bash を使用してファイルが作成された経過時間 (秒単位) をテストしようとしています。変更ではなく、作成日が必要です。

findwithのようなコマンドを使用せずに、これを行う方法はありgrepますか?

4

4 に答える 4

24

残念ながら、作成時間の質問には答えられませんが、最終変更時間については、次を使用して、ファイル名最後に変更されてからのエポック日付秒単位で取得できます。

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 で確認するにはどうすればよいですか?

于 2009-11-30T11:35:18.177 に答える
8

現時点で見つけた最良の答えは次のとおりですが、それは変更時間のみです。

expr `date +%s` - `stat -c %Y /home/user/my_file`
于 2009-11-30T18:14:55.343 に答える
2

システムに以下がある場合stat:

modsecs=$(stat --format '%Y' filename)

そして、 Joelの答えのように数学を行うことができます。

于 2009-11-30T14:12:51.367 に答える
1

--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]} ))
}  
于 2009-11-30T12:29:14.903 に答える