액세스 시간을 기준으로 재귀적으로 정렬된 목록 파일 + 디렉터리 경로

액세스 시간을 기준으로 재귀적으로 정렬된 목록 파일 + 디렉터리 경로

LRU 스크립트를 작성 중인데 20시간 동안 작업한 후에 수정할 수 없는 재귀 모드 문제가 발생했습니다.

액세스 시간(--time=atime)별로 정렬된 파일을 표시하는 명령이 필요합니다. 깊이도 관리하고 싶지만, 그렇지 못하더라도 괜찮습니다.

  • 메인 디렉토리:
    • 파일 1
    • 디렉토리 1:
      • 파일 1
      • 파일2
      • 하위 디렉터리 1:
        • 파일1
        • 파일 2
    • 디렉토리 2:
      • 파일 1
      • 파일 2
      • 하위 디렉터리 2:
        • 파일 1
        • 파일 2
        • 하위 디렉터리 3:
          • 파일 1

디렉토리를 제외하고 파일을 액세스 시간별로 정렬하고 싶습니다.

좋다

/기본 디렉터리/디렉터리 1/파일 1

/기본 디렉토리/파일 1

/기본 디렉터리/디렉터리 1/하위 디렉터리 1/파일 2

/기본 디렉터리/디렉터리 2/하위 디렉터리 2/하위 디렉터리 3/파일 1

등..

답변1

유사한 문제를 해결하기 위해 매우 일반적으로 사용되는 6가지 도구가 있습니다.

  • find, 특정 항목과 일치하는 파일이나 디렉터리를 찾습니다.

    및 옵션 -mindepth-maxdepth명령이 작동할 파일 시스템 트리의 깊이(항상 깊이 0에 있는 지정된 이름에 상대적)를 제어합니다.

    -type옵션은 파일, 디렉터리, 기호 링크 또는 장치에 대한 고려를 제한하는 데 유용합니다.

    -printf옵션은 명령이 일치하는 이름(디렉토리 항목)에 대한 정보를 원하는 형식으로 인쇄하도록 하기 때문에 매우 유용합니다. 나는 특히 %TY%Tm%Td %TT %p\nformat 을 사용하여 마지막 수정 날짜와 시간, 각 일치 항목의 전체 경로와 이름을 각 줄에 인쇄하는 를 좋아합니다 YYYYMMDD HH:MM:SS.sss PATH. 이 형식은 올바르게 정렬됩니다. 마지막 액세스의 경우 를 사용합니다 . 단, 마운트 옵션을 사용하는 %AY%Am%Ad %AT %p\n경우 액세스 타임스탬프가 전혀 기록되지 않습니다 . 또는 마운트 옵션을 사용하는 경우 액세스 타임스탬프는 수정 후 첫 번째 액세스에 대해서만 수정됩니다. 따라서 가장 최근에 사용된 검사는 신뢰할 수 없습니다. (그러나 가장 최근에 수정된 목록은 매우 안정적입니다. 사용자가 타임스탬프를 직접 수정할 수 있지만 그렇지 않은 경우에는 자동으로 유지됩니다.)noatimerelatime

  • sort출력을 정렬합니다.

    -d, -g, -h, -M및 옵션 은 -n항목을 비교하는 방법을 정의하고 -R옵션은 순서를 무작위로 만듭니다.

    -r옵션을 사용하면 정렬 순서를 반대로 바꿀 수 있습니다(위 옵션 중 하나와 함께 사용됨).

    -t옵션은 필드(열)가 정의되는 방식을 재정의합니다. 기본적으로 공백(공백 및 탭)은 열을 구분합니다.

    -k옵션을 사용하면 각 줄의 어느 부분이 정렬 키로 간주되는지 정의할 수 있습니다. 기본적으로 전체 줄이 고려됩니다.

  • uniq여러 개의 연속된 항목을 하나로 결합하기 위해 정렬 후에 자주 사용됩니다. 즉, 고유한 줄만 출력됩니다.

  • cut출력의 각 줄에서 특정 열만 선택하는 가장 간단한 방법입니다.

    옵션 -f은 인쇄할 필드를 선택합니다. (기본적으로 최대 하나의 필드(구분 기호 없음)가 있는 줄이 인쇄됩니다. 옵션은 -s그러한 줄의 인쇄를 억제합니다.)

    -d옵션을 사용하여 필드 정의를 재정의할 수 있습니다. 기본적으로 공백은 필드를 구분합니다.

  • sed적용되는 강력한 스트림 편집기입니다.정규 표현식입력에 필요에 따라 필터링하고 수정합니다.

  • awkawk 언어의 통역사입니다. Awk 스크립트는 기본적으로행위, 각 라인에 대해(또는 모든 처리 전후에 또는 라인(또는 레코드)이 일부 규칙과 일치하는 경우) 실행되는 코드 조각입니다.

이 특정 문제는 간단한 파이프라인에서 위 명령 중 세 가지를 사용하여 해결할 수 있습니다. find트리의 원하는 깊이에서 파일을 찾는 데 사용하고 각 파일에 대해 정렬 가능한 날짜 및 시간과 파일의 상대 경로를 인쇄합니다. 출력을 정렬합니다. 각 줄의 날짜 및 시간 부분을 제거하고 각 줄의 각 파일에 대한 상대 경로만 남겨 둡니다.

답변2

지금까지 가장 쉬운 방법은 다음을 사용하는 것입니다.zsh. 그것은글로벌 한정자유형, 타임스탬프 및 기타 속성을 기준으로 파일을 일치시키고 정렬할 수 있습니다.

print -lr -- *(.Doa)
print -lr -- **/*(.Doa)

첫 번째 명령은 액세스 시간( )별로 정렬된 .도트 파일( )을 포함하여 현재 디렉터리에 있는 일반 파일( )의 이름을 인쇄합니다 . 두 번째 명령은 현재 디렉터리와 해당 하위 디렉터리의 파일을 반복적으로 나열합니다.Doa

관련 정보