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
format 을 사용하여 마지막 수정 날짜와 시간, 각 일치 항목의 전체 경로와 이름을 각 줄에 인쇄하는 를 좋아합니다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
트리의 원하는 깊이에서 파일을 찾는 데 사용하고 각 파일에 대해 정렬 가능한 날짜 및 시간과 파일의 상대 경로를 인쇄합니다. 출력을 정렬합니다. 각 줄의 날짜 및 시간 부분을 제거하고 각 줄의 각 파일에 대한 상대 경로만 남겨 둡니다.