bash에서 file2가 file1보다 최신인지 확인하는 방법은 무엇입니까? 수정되었습니다 stack. 수정 시간을 기준으로

file2이후에 마지막으로 수정 된 것을 어떻게 확인할 수 file1있습니까?

이 예에서는 perl보다 최근에 수정되었습니다 stack. 수정 시간을 기준으로 이러한 파일을 비교할 수있는 bash 또는 Linux 명령이 있습니까?

-rw-r--r--    1 root     root         1577 Sep  7 22:55 stack
-rwxr-xr-x    1 root     root          626 Sep  7 23:10 perl


답변

여기 에서 찾았습니다

for f in /abcd/xyz* do
   [ "$f" -nt /abcd/test.txt ] && echo "file f$ found" done

답변

if [[ FILE1 -nt FILE2 ]]; then
  echo FILE1 is newer than FILE2
fi

남자 테스트 ‘ 에서 가져 왔습니다 . 발췌 :

FILE1 -nt FILE2
  FILE1 is newer (modification date) than FILE2

답변

이를 수행하는 다른 방법 :

find -name file2 -newer file1

file2가 file1보다 오래되었거나 같은 경우 null을 반환합니다. 최신 인 경우 file2의 이름과 디렉토리를 반환합니다.

Linux는 파일이 생성 된시기를 추적하지 않습니다. 이 테스트는 가장 최근의 수정 날짜 및 시간에 대한 것입니다.


답변

더 자세한 정보를 원하면 stat명령을 사용할 수 있습니다

<tbielawa>@(fridge)[~/SuperUser] 03:15:10
$ touch firstFile
<tbielawa>@(fridge)[~/SuperUser] 03:15:24
$ touch secondFile
<tbielawa>@(fridge)[~/SuperUser] 03:15:45
$ stat firstFile 
  File: `firstFile'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 151528      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/tbielawa)   Gid: (  500/tbielawa)
Access: 2010-09-14 03:15:24.938721003 -0400
Modify: 2010-09-14 03:15:24.938721003 -0400
Change: 2010-09-14 03:15:24.938721003 -0400
<tbielawa>@(fridge)[~/SuperUser] 03:15:48
$ stat secondFile 
  File: `secondFile'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 151529      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/tbielawa)   Gid: (  500/tbielawa)
Access: 2010-09-14 03:15:45.074722792 -0400
Modify: 2010-09-14 03:15:45.074722792 -0400
Change: 2010-09-14 03:15:45.074722792 -0400

답변

echo $(($(date -r file1 +%s)-$(date -r file2 +%s)))
2208

결과가 0보다 크면 첫 번째 파일이 더 새 파일입니다. (리눅스에 저장되는 생성 시간이 아니라 마지막 수정 측면에서 더 낫습니다).


답변

이 링크에 따르면, 유닉스는 생성 날짜를 저장하지 않습니다.
http://www.issociate.de/board/post/302628/How_to_check_file_creation_date.html

그러나 마지막 액세스는 저장합니다.

마지막 액세스

 ls -t  # displays in order of date. So the first one is the 

ls는 각 파일을 새 줄에 표시합니다.

따라서 ls -t는 첫 번째 줄 등에 최신 파일을 표시합니다.

  • 자신을 사용하여 첫 번째 줄을 선택할 수 있습니다.
  • sed를 사용하여 첫 번째 줄을 선택할 수 있습니다.

    ls -t php.exe php.ini | sed -n ‘1p’php.ini

할 수있는 -lt 당신이 파일을 지정하지 않으면 것을 볼 수 있지만 .. 그리고 디렉토리 .. 다음은 첫 번째 줄의 총을 제공 않습니다 당신은 같은 두 번째 행을 선택할 수 있도록$ls -lt | sed -n '2p'

좋은 것은

ls -t | head -n 1

또는

ls -lt | head   

첫 번째 파일을 먼저 수정 한 순서대로 처음 10 행을 표시하며 어떤 파일인지 확인할 수 있습니다.


답변

다음은 약간의 스크립트입니다.

mtf0=`stat -c %Y file0`
mtf1=`stat -c %Y file1`
dt=$(( mtf1 - mtf0 ))
[[ $dt -gt 0 ]] && echo "File F1 is newer than file F0 "