파일이 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
이미 "찾은"파일을보기 위해 실행 하는 것 보다 더 나은 접근 방식이라고 생각합니다 . 또한 날짜 조작은 재미 있습니다 ;-)
- 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를 통해 권한을 변경하면 "변경"이 업데이트됩니다.
'Programing' 카테고리의 다른 글
"기능 플래그"란 무엇입니까? (0) | 2020.09.03 |
---|---|
프로그래밍 방식으로 자산 카탈로그 액세스 (0) | 2020.09.03 |
CREATE OR REPLACE는 어떻게 사용합니까? (0) | 2020.09.02 |
제출시 양식 리디렉션 또는 새로 고침을 방지 하시겠습니까? (0) | 2020.09.02 |
사전에 추가하는 다양한 방법 (0) | 2020.09.02 |