>

주어진 디렉토리에서 가장 최근에 액세스 한 파일을 어떻게 찾습니까?

find 를 사용할 수 있습니다  마지막 n 에서 수정/액세스 된 모든 파일을 나열하는 명령  의사록. 그러나 내 경우에는 마지막 파일이 언제 수정/액세스되었는지 확실하지 않습니까? 내가 필요한 것은 다른 하위 파일 또는 하위 디렉토리 중에서 최근에 액세스/수정 된 모든 파일을 액세스/수정 된 시간별로 정렬하여 나열하는 것입니다.

가능합니까?

  • 답변 # 1

    재귀 스위치를 사용할 수 있습니다 ( -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
    
    

  • 답변 # 2

    마지막으로 액세스 한 파일에서 마지막으로 액세스 한 세 번째 파일로 정렬 된 마지막 3 개의 액세스 된 파일을 인쇄하려면 :

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

    마지막으로 수정 된 파일을 마지막으로 수정 한 파일에서 세 번째로 마지막으로 수정 된 파일로 정렬 한 마지막 3 개의 수정 된 파일을 인쇄하려면 :

    find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print $2}'
    
    

    find . -type f -exec stat -c '%X %n' * : 현재 디렉토리 계층에서 각 파일의 파일 경로와 마지막 액세스 시간을 인쇄합니다.

    find . -type f -exec stat -c '%Y %n' * : 현재 디렉토리 계층에서 각 파일의 파일 경로와 마지막 수정 시간을 인쇄합니다.

    sort -nr : 역순으로 정렬;

    awk 'NR==1,NR==3 {print $2}' : 첫 번째, 두 번째 및 세 번째 줄의 두 번째 필드를 인쇄합니다.

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

    % touch file1
    % touch file2
    % touch file3
    % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
    ./file3
    ./file2
    ./file1
    % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
    ./file3
    ./file2
    ./file1
    % cat file1
    % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
    ./file1
    ./file3
    ./file2
    % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
    ./file3
    ./file2
    ./file1
    % touch file2
    % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
    ./file2
    ./file1
    ./file3
    % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
    ./file2
    ./file3
    ./file1
    
    

  • 답변 # 3

    지정된 디렉토리의 파일을 수정 연령 (가장 최근)으로 정렬하려면 다음을 수행하십시오.

    ls -t
    
    

    액세스 시간을 기준으로 정렬하려면 -u 를 추가하십시오.  옵션.

    ls -tu
    
    

    그러나현대 Linux 시스템은 기본적으로 정확한 액세스 시간을 추적하지 않습니다. 따라서 액세스 타임 스탬프가 신뢰할 수 없습니다.

    하위 디렉토리를 포함하여 디렉토리 트리에서 최신 파일을 찾으려면 가장 쉬운 방법은 zsh의 glob 한정자를 사용하는 것입니다.

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

    oa 사용   om 대신  수정 시간보다는 액세스 시간을 사용합니다. 예를 들어 10 개의 최신 파일을 가져 오기 위해 일치를 제한 할 수 있습니다.

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

  • 답변 # 4

    파일 트리에서의 위치에 관계없이 "최근"파일 전체를 액세스/수정 시간별로 정렬 하시겠습니까?

    이 작업을 수행하는 한 가지 방법은 stat 를 사용하는 것입니다  각 파일에 대한 수정 시간을 인쇄하려면, sort  결과에 의해, 그리고 cut  결과의 수정 시간.

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

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

  • 답변 # 5

    이것을 크로스 플랫폼 bash 함수에 넣자 :

    # Print N most recently modified files in current dir or below
    mrf() {
        local _n=${1:-3} # Default to 3
        case $OSTYPE in
            linux*|msys*)
                find . -type f -exec stat -c '%X %n' {} \; | sort -nr | awk -v var="${_n}" 'NR==1,NR==var {print $0}' | while read t f; do d=$(date -d @$t "+%b %d %T %Y"); echo "$d -- $f"; done
            ;;
            darwin*)
                find . -type f -exec stat -f '%Dm %N' {} \; | sort -nr | awk -v var="${_n}" 'NR==1,NR==var {print $2}' | while read f; do stat -f '%Sm -- %N' $f; done
            ;;
         esac
     }
    
    

    사용법 :

    $ mrf
    Jan 10 11:50:03 2019 -- ./somefile
    Jan 10 11:44:24 2019 -- ./nested/dir/file.txt
    Jan 10 11:40:50 2019 -- ./anotherfile
    $ mrf 5
    Jan 10 11:50:03 2019 -- ./somefile
    Jan 10 11:44:24 2019 -- ./nested/dir/file.txt
    Jan 10 11:40:50 2019 -- ./anotherfile
    Jan 10 06:30:22 2019 -- ./otherdir/yetanotherfile
    Jan 09 10:00:00 2019 -- ./oldfile
    
    

  • 이전 bash - 소문자/대문자로 단어의 가능한 모든 조합 얻기
  • 다음 sudo - 사용자 변경 후 스크립트 실행 진행