특정 디렉토리에서 가장 최근에 액세스한 파일을 찾는 방법은 무엇입니까?
이 명령을 사용하면 지난 몇 분 동안 수정/액세스된 모든 파일을 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])
숨겨진 파일은 건너뜁니다. 숨겨진 파일도 고려하려면 D
glob 한정자를 추가하세요. 또한 .
고려하기 위해 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-