특정 디렉토리에서 가장 최근에 액세스한 파일을 어떻게 찾나요?
이 명령을 사용하면 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-