최신 파일 찾기

최신 파일 찾기

특정 디렉토리에서 가장 최근에 액세스한 파일을 어떻게 찾나요?

이 명령을 사용하면 find지난 몇 분 동안 수정/액세스한 모든 파일을 나열할 수 있습니다 n. 하지만 제 경우에는 마지막 파일이 언제 수정/액세스되었는지 잘 모르겠습니다. 예를 들어, 내가 필요한 것은 다른 모든 하위 파일이나 하위 디렉터리 중에서 아주 최근에 액세스/수정된 모든 파일을 액세스/수정 시간별로 정렬하여 나열하는 것입니다.

그게 가능합니까?

답변1

마지막으로 액세스한 파일 3개를 인쇄하려면(마지막으로 액세스한 파일부터 세 번째로 액세스한 파일 순으로 정렬):

find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'

마지막으로 수정된 파일 3개를 인쇄하려면(마지막 수정 파일부터 세 번째 수정 파일 순으로 정렬):

find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
  • find . -type f -exec stat -c '%X %n' {} \;: 마지막 액세스 시간과 현재 디렉토리 계층 구조의 각 파일에 대한 파일 경로를 인쇄합니다.
  • find . -type f -exec stat -c '%Y %n' {} \;: 마지막 수정 시간과 현재 디렉터리 계층 구조의 각 파일에 대한 파일 경로를 인쇄합니다.
  • sort -nr: 역순으로 정렬합니다.
  • cut -d' ' -f2-: 두 번째 필드부터 공백으로 구분된 모든 필드를 인쇄합니다.
  • awk 'NR==1,NR==3 {print}': #1-3 범위의 행을 인쇄합니다.

에서 3을 원하는 파일 수로 변경하여 표시할 파일 수를 변경할 수 있습니다 awk 'NR==1,NR==3 {print}'.

이 답변은 GNU 버전을 기반으로 하므로 BSD 기반 시스템 사용자는 관련 타임스탬프를 인쇄하려면 명령 stat의 형식 문자열을 변경해야 합니다.stat

~ % touch file\ 1
~ % touch file\ 2
~ % touch file\ 3
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % cat file\ 1
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 1
./file 3
./file 2
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % touch file\ 2
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 2
./file 1
./file 3
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 2
./file 3
./file 1

답변2

특정 디렉토리의 파일을 수정 기간을 기준으로 정렬하려면(가장 최근 항목부터):

ls -t

접속 시간별로 정렬하려면 -u옵션을 추가하세요.

ls -tu

하지만 주의하세요.최신 Linux 시스템은 기본적으로 정확한 액세스 시간을 추적하지 않습니다.. 따라서 액세스 타임스탬프가 신뢰할 수 없을 수 있습니다.

하위 디렉터리를 포함하여 디렉터리 트리 내에서 가장 최근 파일을 찾으려면 지금까지 가장 쉬운 방법은 zsh의글로벌 한정자.

print -lr -- **/*(om)

수정 시간 대신 접근 시간을 사용하려면 oa대신 사용하세요 . om예를 들어 가장 최근 파일 10개를 가져오도록 일치 항목을 제한할 수 있습니다.

print -lr -- **/*(om[1,10])

숨겨진 파일을 건너뜁니다. 숨겨진 파일도 고려하려면 Dglob 한정자를 추가하세요. 또한 .고려하기 위해 glob 한정자를 추가할 수도 있습니다.정기적인파일(symlink, 디렉터리, fifos 등은 고려하지 않음) 및 mm-60/또는 mh-1지난 한 시간 내에 마지막으로 수정된 파일로 제한합니다.

답변3

재귀 스위치( -R)를 ls시간별 정렬 스위치( -t) 및 역방향 정렬 스위치( -r)와 함께 사용하여 디렉터리 트리의 모든 파일을 나열할 수 있습니다. 이렇게 하면 하위 디렉터리 전체에서 액세스/수정 날짜를 기준으로 모든 파일이 정렬되지는 않지만 각 하위 디렉터리 내에서는 독립적으로 이 날짜를 기준으로 정렬됩니다.

다음과 같은 명령을 사용합니다: ls -ltrR <sometopdir>.

$ ls -ltrR .
total 759720
-rw-r-----@  1 sammingolelli  staff    2514441 Mar 31  2015 restfulapi-120704053212-phpapp01.pdf
-rw-r-----@  1 sammingolelli  staff     567808 Apr  7  2015 USGCB-Windows-Settings.xls
-rw-r-----@  1 sammingolelli  staff     180736 Apr  7  2015 USGCB-RHEL5-Desktop-Settings-Version-1.2.5.0.xls
-rw-r-----@  1 sammingolelli  staff       6474 Apr  8  2015 tap_kp_mavericks.txt

./kerberos:
total 5464
-rw-r-----@ 1 sammingolelli  staff    37317 Oct  2 13:03 Set_up_Kerberos_instruction_d8.docx
-rw-r-----@ 1 sammingolelli  staff  2753195 Oct 13 13:49 Keberos configuration with AD 01_09_2014.pdf

./homestarrunner:
total 10624
-rw-rw-rw-@ 1 sammingolelli  staff   319422 May 10  2000 error_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    53499 Jun  8  2001 sb_duck.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   199254 Mar 11  2002 email_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff    39288 Mar 25  2002 bubs_dontutalk.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    75432 May  6  2002 trash_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   298946 Dec  1  2002 error_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   298686 Dec  1  2002 startup_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    90279 Dec  1  2002 sb_meedlymee.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    73561 Dec  1  2002 sb_dubdeuce.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   193097 Dec  1  2002 sb_pizza.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    30093 Dec  1  2002 sb_stiny.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    61858 Dec  1  2002 ss_sadflying.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   150142 Dec  1  2002 email_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    68545 Dec  1  2002 bubs_grabbinbutt.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    61022 Dec  1  2002 cz_jeorghb.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    40124 Dec  1  2002 marzy_nasty.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   224116 Dec  1  2002 shutdown_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   260546 Dec  1  2002 shutdown_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    57686 Dec  1  2002 trash_hs.wav

답변4

파일 트리에서의 위치에 관계없이 액세스/수정 시간을 기준으로 "최근" 파일 전체 세트를 정렬하고 싶으십니까?

이를 수행하는 한 가지 방법은 를 사용하여 stat각 파일의 수정 시간을 sort결과별로 인쇄한 다음 cut결과에서 수정 시간을 인쇄하는 것입니다.

이름에 줄 바꿈이 포함된 파일의 경우 중단되지만 다른 파일의 경우 최근 60분 이내에 수정된 파일을 가장 최근부터 가장 최근에 수정된 순서대로 나열하는 솔루션이 있습니다.

find . -type f -mmin -60 -exec stat -c $'%Y\t%n' {} + | sort -nr | cut -f2-

관련 정보