최신 파일 찾기

최신 파일 찾기

특정 디렉토리에서 가장 최근에 액세스한 파일을 찾는 방법은 무엇입니까?

이 명령을 사용하면 지난 몇 분 동안 수정/액세스된 모든 파일을 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각 파일의 수정 시간을 인쇄한 다음 결과에 수정 시간을 인쇄하는 것입니다.sortcut

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

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

관련 정보