프로덕션 서버가 있습니다. 특정 개체에 대한 디렉터리가 1개 있는데 다른 네트워크 노드에서 파일을 수집한 후 계속 파일이 쌓입니다. 따라서 해당 하위 디렉터리에는 2021년 5월의 파일이 포함됩니다. 일반적으로 매 시간마다 하루 분량의 하위 디렉터리를 생성하고 해당 하위 디렉터리에 파일을 푸시합니다. 하위 디렉토리 구조 -
다음 명령을 사용하여 find . -type f -mtime +2 | xargs ls -ltr
2일 전의 파일을 나열하여 삭제했습니다.
그런데 확인 명령어를 실행해보니 의외의 방식으로 정렬되어 있는 것을 발견했습니다.
위에서 볼 수 있듯이 이상적으로는 10-03 파일을 먼저 단축한 다음 11-03 파일을 단축해야 하지만 정반대입니다. 또 다른 점은 해당 날짜(18-03)의 파일도 나열한다는 것입니다. 그럼 누군가가 그것에 대해 좀 밝힐 수 있습니까?
디렉토리 크기는 11G입니다. 그리고 파일은 일반적으로 1분마다 쌓이고 있는데 이것이 영향을 미치나요?
디스트로-Red Hat Enterprise Linux 서버 버전 7.6(Maipo)
답변1
find . -ctime +2
파일 보고마지막으로 변경된 상태 시간3일 이상이 지났습니다( find
시작 시간과 파일의 ctime 사이의 차이(정수 일수로 반올림)가 2보다 큼).
ctime
인쇄할 수 있는 내용은 ls -lc
파일에 대한 내용이 수정되면 업데이트됩니다(액세스 시간 제외). 디렉터리의 항목 이름이 변경될 때, 새 디렉터리에서 연결이 해제될 때, 해당 내용이 또는 권한이나 기타 메타데이터가 있을 때 변화...
ls -l
기본적으로 표시되고 ls -t
기본적으로 정렬되는 타임스탬프는 다음과 같습니다.마지막 수정. 이 값은 내용이 수정될 때만 업데이트됩니다(명령을 사용하여 임의로 설정할 수도 있음 touch
). 이는 다음과 같이 볼 수 있습니다.파일 콘텐츠 생성 시간.
그 외에는마지막 액세스 시간, 일부 시스템에는출생 시간또한 ~으로 알려진생성 시간, 비록 일반적으로만큼 좋지는 않지만마지막 수정. 최신 버전의 GNU ls
(RHEL7 시스템에는 없음) 의 경우 ls -l --time=birth
또는 로 표시될 수 있습니다 ls -l --time=creation
.
2일 이상 전에 마지막으로 수정된 일반 파일을 찾아 전달하여 ls
가장 오래된 것부터 최신 순으로 나열하려면 다음을 수행할 수 있습니다.
find . -type f -mtime +1 -exec ls -lrtd {} +
which (with 제외)로 처리할 수 없는 출력을 사용하지 마세요 xargs
.find
find -print0 | xargs -r0...
그러나 여러 인스턴스를 실행할 수 있으며 xargs
, 이로 인해 독립적으로 정렬된 여러 파일 배치가 출력됩니다.find -exec cmd {} +
cmd
이를 방지하려면 zsh
다음을 사용하고 수행할 수 있습니다.
autoload zargs
zargs -- ./**/*(D.m+1Om) -- ls -Uld
또는 xargs
분할에 GNU를 사용하십시오.
print -rNC1 -- **/*(ND.m+1Om) | xargs -r0 ls -Uld --
(정렬하지 않는 GNU 확장입니다 -U
(이미 정렬되어 있으므로 필요하지 않음). 다른 구현으로 대체할 수 있습니다).ls
zsh
-rt
ls
언제든지 전혀 분할하지 않으려고 시도할 수 있지만 명령에 전달하고 확인할 수 있는 길이 또는 인수 + 환경에 대한 제한이 발생할 수 있습니다.매개변수 목록이 너무 깁니다.실수:
ls -lrtd -- **/*(D.m+1oN)
find
zsh , sort
및 sed
유틸리티 의 GNU 구현을 사용하여 zsh를 설치할 수 없는 경우 xargs
( ls
RHEL7에서 볼 수 있음) 다음을 수행할 수 있습니다.
find . -type f -mtime +1 -printf '%T@:%p\0' |
LC_ALL=C sort -zn |
LC_ALL=C sed -z 's/^[^:]*://' |
xargs -r0 ls -Uld
find
파일을 숫자로 인쇄하여 mtime 별로 수동으로 정렬하고 다음 을 사용하여 %T@
정렬합니다 . 이 모든 작업은 NUL로 구분된 레코드를 사용하여 수행되므로 임의의 파일 경로를 사용할 수 있습니다.sort -n
sed
xargs
ls
-U
어쨌든 GNU를 사용하여 이러한 파일을 삭제하려면 해당 조건 find
자를 사용하면 됩니다 -delete
.
find . -type f -mtime +1 -delete