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

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

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\n형식을 사용하여 마지막 수정 날짜와 시간은 물론 각 행의 각 일치 항목의 전체 경로와 이름을 인쇄하는 점이 마음에 듭니다 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

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

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

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

관련 정보