파일이 x 이상 생성되었는지 Linux bash에서 확인하고 싶습니다.
파일 이름이 text.txt이고 시간이 2 시간이라고 가정 해 보겠습니다.
if [ what? ]
then
echo "old enough"
fi
파일이 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
-cmin
변경 또는 -amin
액세스 시간에 사용할 수 있습니다 . 다른 사람들이 지적했듯이 생성 시간을 추적 할 수 없다고 생각합니다.
find
일치하는 항목이 없을 때 0이 아닌 값 을 반환 한다고 생각했습니다 .
text.txt
디렉토리가 아닌 것으로 추정됩니다.
[ "$(find path/to/file -mmin +120)" ] && echo "it is old"
나는 항상 date -r /the/file +%s
나이를 찾기 위해 사용 하는 것을 좋아했습니다 .
또한 touch --date '2015-10-10 9:55' /tmp/file
임의의 날짜 / 시간에 대해 매우 세분화 된 시간을 얻을 수 있습니다 .
let AGE=$(($(date +%s)-$(date -r /path/to/file +%s)))
[생성 결코 수정 또는 "개조 연령 관련된"이라는 가정하에]
function file-age { FILE_CREATED_TIME=`date -r "$1" +%s`; TIME_NOW=`date +%s`; echo "$[ ${TIME_NOW} - ${FILE_CREATED_TIME} ]"; }
$[ ]
은 더 이상 사용 되지 않는 경우 적어도 오래되고 덜 이식 가능 하며 $(( ))
대신 사용해야 합니다. 역 따옴표는보다 취약합니다 $( )
. 또한 함수 이름의 하이픈은 완전히 이식 할 수 없습니다. 그러나 그것의 본질은 좋습니다!
를 사용하여 stat
파일의 마지막 수정 날짜 date
를 파악하고, 현재 시간과 bashisms의 자유로운 사용을 파악하기 위해 파일의 마지막 수정 시간을 기반으로 원하는 테스트를 수행 할 수 있습니다 1 .
if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
echo "$somefile is older then 2 hours"
fi
코드는 find
접근 방식 보다 약간 덜 읽기 쉽지만 find
이미 "찾은"파일을보기 위해 실행 하는 것 보다 더 나은 접근 방식이라고 생각합니다 . 또한 날짜 조작은 재미 있습니다 ;-)
%Z
대신 사용 %Y
하여 원하는 "시간 변경"을 얻을 수 있습니다.[최신 정보]
Mac 사용자 stat -f "%m" $somefile
의 경우 위의 Linux 특정 구문 대신 사용
stat
내장되어 있지 않습니다-나에게 매우 나쁩니다.
ctime은 기술적 으로는 창조의 시간 이 아니지만 꽤 자주 그렇습니다 .
ctime은 파일 내용 변경의 영향을받지 않기 때문에 일반적으로 파일이 생성 될 때만 업데이트됩니다. 그리고 예-비명을 지르는 소리를들을 수 있습니다. 액세스 권한이나 소유권을 변경하면 업데이트됩니다.하지만 일반적으로 한 번 수행되며 일반적으로 파일을 거기에 넣는 동시에 수행됩니다.
개인적으로 나는 항상 모든 것에 mtime을 사용하고 그것이 당신이 원하는 것이라고 상상합니다. 하지만 어쨌든 ... 여기 Guss의 "매끄럽지 않은"bash를 사용하기 쉬운 기능으로 다시 해시했습니다.
#! / bin / bash function age () { 로컬 파일 이름 = $ 1 local changed =`stat -c % Y "$ filename"` 현재 지역 =`날짜 + % s` 로컬 경과 let elapsed = 지금 변경됨 에코 $ elapsed } 파일 = "/" echo $ file의 나이는 $ (age "$ file") 초입니다.
local changed=$(perl -MFile::stat -e "print stat(\"${filename}\")->mtime")
superuser.com/questions/427551/...
chmod
파일에 적용된 간단한 은 그 아이디어를 무효화합니다. 그러나 나는 살 수 는 ;-) 그 일을
+%s
하반기에서 누락되었습니다
age() { echo $(( $(date +%s) - $(date -r "$1" +%s) )); }
(수정을 위해 @Grizly에게 감사드립니다!)
noatime
옵션으로 마운트 된 모든 파일 시스템에서 생성 시간 인 액세스 시간을 사용 하는 것이 좋습니다 (성능에 좋으므로 사용해야 함). 따라서 %X
대신 %Y
.
도구 '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를 통해 권한을 변경하면 "변경"이 업데이트됩니다.