Programing

파일이 x보다 오래 전에 생성되었는지 bash에서 어떻게 확인합니까?

lottogame 2020. 9. 2. 20:37
반응형

파일이 x보다 오래 전에 생성되었는지 bash에서 어떻게 확인합니까?


파일이 x 이상 생성되었는지 Linux bash에서 확인하고 싶습니다.

파일 이름이 text.txt이고 시간이 2 시간이라고 가정 해 보겠습니다.

 if [ what? ]
 then
     echo "old enough"
 fi

수정 시간에만

if test `find "text.txt" -mmin +120`
then
    echo old enough
fi

또는 한 줄에 동일합니다.

#!/bin/bash
find text.txt -mmin +120 -exec echo "old enough" \;

-cmin변경 또는 -amin액세스 시간에 사용할 수 있습니다 . 다른 사람들이 지적했듯이 생성 시간을 추적 할 수 없다고 생각합니다.


나는 항상 date -r /the/file +%s나이를 찾기 위해 사용 하는 것을 좋아했습니다 .

또한 touch --date '2015-10-10 9:55' /tmp/file임의의 날짜 / 시간에 대해 매우 세분화 된 시간을 얻을 수 있습니다 .


를 사용하여 stat파일의 마지막 수정 날짜 date를 파악하고 현재 시간과 bashisms의 자유로운 사용을 파악하기 위해 파일의 마지막 수정 시간 1을 기반으로 원하는 테스트를 수행 할 수 있습니다 .

if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
   echo "$somefile is older then 2 hours"
fi

코드는 find접근 방식 보다 약간 덜 읽기 쉽지만 find이미 "찾은"파일을보기 위해 실행 하는 것 보다 더 나은 접근 방식이라고 생각합니다 . 또한 날짜 조작은 재미 있습니다 ;-)


  1. Phil이 올바르게 지적했듯이 생성 시간은 기록되지 않지만 아래 %Z대신 사용 %Y하여 원하는 "시간 변경"을 얻을 수 있습니다.

[최신 정보]

Mac 사용자 stat -f "%m" $somefile의 경우 위의 Linux 특정 구문 대신 사용


생성 시간은 저장되지 않습니다.

저장되는 것은 세 가지 타임 스탬프입니다 (일반적으로 특정 파일 시스템 또는 특정 파일 시스템 옵션으로 끌 수 있음).

  • 마지막 액세스 시간
  • 마지막 수정 시간
  • 마지막 변경 시간

파일에 대한 "변경"은 권한 변경, 이름 변경 등으로 간주됩니다. 수정은 내용 일뿐입니다.


ctime은 기술적 으로는 창조의 시간 이 아니지만 꽤 자주 그렇습니다 .

ctime은 파일 내용 변경의 영향을받지 않기 때문에 일반적으로 파일이 생성 될 때만 업데이트됩니다. 그리고 예-비명을 지르는 소리를들을 수 있습니다. 액세스 권한이나 소유권을 변경하면 업데이트됩니다.하지만 일반적으로 한 번 수행되며 일반적으로 파일을 거기에 넣는 동시에 수행됩니다.

개인적으로 나는 항상 모든 것에 mtime을 사용하고 그것이 당신이 원하는 것이라고 상상합니다. 하지만 어쨌든 ... 여기 Guss의 "매끄럽지 않은"bash를 사용하기 쉬운 기능으로 재해시했습니다.

#! / bin / bash
function age () {
   로컬 파일 이름 = $ 1
   local changed =`stat -c % Y "$ filename"`
   현재 지역 =`날짜 + % s`
   로컬 경과

   let elapsed = 지금 변경됨
   에코 $ elapsed
}

파일 = "/"
echo $ file의 나이는 $ (age "$ file") 초입니다.

찾기는 좋지만 다른 방법으로 사용할 수 있다고 생각합니다. 특히 파일이 몇 초 오래 되었습니까?

date -d "now - $( stat -c "%Y" $filename ) seconds" +%s

GNU 날짜 사용


도구 'stat'의 결과를 고려하십시오.

  File: `infolog.txt'
  Size: 694         Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 11635578    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/     fdr)   Gid: ( 1000/     fdr)
Access: 2009-01-01 22:04:15.000000000 -0800
Modify: 2009-01-01 22:05:05.000000000 -0800
Change: 2009-01-01 22:05:05.000000000 -0800

여기에서 액세스 / 수정 / 변경에 대한 세 가지 날짜를 볼 수 있습니다. 생성 된 날짜가 없습니다. 파일 내용이 수정 된시기 ( "modify"필드) 또는 해당 inode가 변경된시기 ( "change"필드) 만 실제로 확인할 수 있습니다.

두 필드가 모두 업데이트되는 경우의 예 :

누군가 추가 정보를 파일 끝에 연결하면 "수정"이 업데이트됩니다.

누군가가 chmod를 통해 권한을 변경하면 "변경"이 업데이트됩니다.

참고 URL : https://stackoverflow.com/questions/552724/how-do-i-check-in-bash-whether-a-file-was-created-more-than-x-time-ago

반응형