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
액세스 타임스탬프가 전혀 기록되지 않으며, 마운트 옵션을 사용하면 수정 후 첫 번째 액세스에서만 액세스 타임스탬프가 수정됩니다. 가장 최근에 가장 적게 사용된 검사는 신뢰할 수 없습니다. (그러나 가장 최근에 수정된 목록은 상당히 신뢰할 수 있습니다. 사용자는 타임스탬프를 수동으로 수정할 수 있지만 그렇지 않은 경우에는 자동으로 유지됩니다.)noatime
relatime
sort
출력을 정렬합니다.,
-d
, 및 옵션은 항목을 비교하는 방법을 정의하며 이-g
옵션은 순서를 무작위로 만듭니다.-h
-M
-n
-R
이
-r
옵션을 사용하면 정렬 순서를 반대로 바꿀 수 있습니다(위 옵션 중 하나와 함께 사용됨).이
-t
옵션은 기본적으로 공백(공백 및 탭)이 열을 구분하는 방식을 재정의합니다.이
-k
옵션을 사용하면 각 행의 어느 부분이 기본적으로 정렬 키로 간주되는지, 전체 행이 고려되는지 정의할 수 있습니다.uniq
일반적으로 정렬 후에 여러 연속 항목을 하나로 결합하여 고유한 행만 출력되도록 하는 데 사용됩니다.cut
출력의 각 행에서 특정 열만 선택하는 가장 간단한 방법입니다.이
-f
옵션은 인쇄할 필드를 선택합니다. (기본적으로 최대 하나의 필드(구분자 없이)를 포함하는 행이 인쇄됩니다. 이 옵션은-s
그러한 행의 인쇄를 억제합니다.)이
-d
옵션을 사용하면 필드 정의를 재정의할 수 있으며 기본적으로 개별 필드는 비어 있습니다.awk
awk 언어의 통역사입니다. awk 스크립트는 기본적으로 다음의 모음입니다.행동, 각 라인(모든 처리 전후 또는 라인(또는 레코드)이 특정 규칙과 일치하는 경우)에 대해 실행되는 코드 조각입니다.
이 특정 문제는 간단한 파이프라인에서 위의 세 가지 명령을 사용하여 해결할 수 있습니다. find
트리의 원하는 깊이에서 파일을 검색하고, 각 파일의 정렬 가능한 날짜와 시간을 인쇄하고, 출력을 정렬합니다. 각 줄의 날짜 및 시간 부분은 각 줄의 각 파일에 대한 상대 경로만 남깁니다.