it-swarm-ko.tech

마지막으로 파일을 연 시간

마지막으로 파일을 열었던 시간을 가져 와서 디렉토리의 모든 파일을 해당 시간별로 정렬 할 수 있습니까?

101
student

이것은 "열린"의 의미에 따라 다르지만 일반적으로 그렇습니다. 일반적으로 3 개의 타임 스탬프가 기록됩니다.

  • mtime — 파일 내용이 변경 될 때 업데이트됩니다. 대부분의 경우 이것이 "기본"파일 시간입니다.
  • ctime — 파일 또는 메타 데이터 (소유자, 권한)가 변경되면 업데이트됩니다
  • atime — 파일을 읽을 때 업데이트

따라서 일반적으로보고 싶은 것은 파일의 atime입니다. stat 또는 ls로 얻을 수 있습니다. 당신이 사용할 수있는 ls -lu을 (를) 선호하지만 ls -l --time=atime (거의 모든 Linux 배포판에서 지원되어야 함) 자주 사용하지 않기 때문에 더 잘 기억할 수 있습니다. 그리고 시간에 따라 정렬-t에게 ls 플래그. 그래서 당신은 간다.

그러나 큰 경고가 있습니다. 파일을 읽을 때마다 시간을 업데이트하면 일반적으로 불필요한 IO가 많이 발생하여 모든 것이 느려집니다. 따라서 대부분의 Linux 배포는 기본적으로 noatime 파일 시스템 마운트 옵션 (기본적으로 atimes를 종료 함) 또는 relatime (기본값은 한 번만 (일반적으로 하루에 한 번) 또는 파일은 이전 읽기 이후 실제로 수정되었습니다. mount 명령을 실행하여 이러한 옵션이 활성화되어 있는지 확인할 수 있습니다.

또한 액세스 시간은 파일 이름이 아닌 inode에 의한 것이므로 하드 링크가 있으면 하나를 읽으면 동일한 파일을 참조하는 모든 이름이 업데이트됩니다.

c는 "창조"가 아닙니다. 생성은 유닉스/리눅스 파일 시스템에 의해 추적되지 않습니다. 이상하게 보이지만 실제로 파일 시스템이 원본인지 알 수있는 방법이 없기 때문에 실제로 의미가 있습니다. 아마도 40 년 전에 파일이 생성되어 여기에 복사되었을 수 있습니다. 실제로 많은 파일 편집기가 원본을 복사하여 작업합니다. 해당 정보가 필요한 경우 git와 같은 버전 제어 시스템을 사용하는 것이 가장 좋습니다.

182
mattdm

ls -ltu 모든 파일을 나열하고 액세스 시간별로 표시하고 정렬합니다.

man ls에서 :

-u     with -lt: sort by, and show, access time with -l: show access
       time and sort by name otherwise: sort by access time
21
Shawn J. Goff

find 명령이 가장 좋습니다. -ctime, -mtime-atime 옵션을 참조하십시오.

4
GBH

리스팅이 사람이 소비하는 경우, 날짜 정렬 플래그 중 하나 (-tu와 함께 액세스 (읽기) 시간에 대해 ls)를 사용하고 수정 (쓰기) 시간에 대해서는 -t 만 사용하십시오. inode 변경 시간은 -tc입니다. 자세한 내용은 mattdm의 답변 을 참조하십시오 (특히 -a-c의 정의에 대한 경고).

이것이 프로그램 소비 용인 경우 ls의 출력을 구문 분석하는 데 문제가 있음 . 쉘이 zsh 인 경우 어쨌든 ls가 필요하지 않습니다. zsh에는 액세스를 증가시켜 (*(Oa)), inode 변경 (*(Oc)_ ) 또는 수정 (*(Om)) 시간입니다. 소문자 o는 나이가 들어감에 따라 정렬됩니다.

act_on_files_by_date *(Om)

그렇지 않으면 파일 이름에 줄 바꾸기 나 인쇄 할 수없는 문자 (현재 로케일)가 포함되어 있지 않다면 다음과 같은 작업을 수행 할 수 있습니다.

ls -t | while read -r name; do act_on_one_file "$name"; done
ls -t | xargs -I {} act_on_one_file {}

한 번에 많은 파일에서 명령을 호출하려면 추가 설정이 필요합니다. 와일드 카드 문자 나 공백이 포함 된 파일 이름은 명령 대체 결과로 확장되므로 act_on_files_by_date $(ls -t)은 이와 같이 작동하지 않습니다. 다음 코드는 파일 이름에 줄 바꿈 문자 나 인쇄 할 수없는 문자가 포함되어 있지 않으면 작동합니다.

IFS='
'
set -f
act_on_files_by_date $(ls -t)
set +f
unset IFS

임의의 파일 이름을 처리하려면 표준 쉘 (zsh, Perl, python)보다 더 강력한 도구를 사용하지 않고 매우 힘든 시간을 보낼 수 있습니다.