linux find 명령 + 날짜별로 정렬된 마지막 5개를 제외한 모든 스냅샷 파일 삭제

linux find 명령 + 날짜별로 정렬된 마지막 5개를 제외한 모든 스냅샷 파일 삭제

아래에는 /zookeeper/version-2사육사 스냅샷 파일이 많이 있습니다.

.
.
.

-rw-r--r-- 1 zookeeper hadoop 495333240 Aug  3 14:51 snapshot.5d00011991
-rw-r--r-- 1 zookeeper hadoop 495333240 Aug  3 14:53 snapshot.5d00011992
-rw-r--r-- 1 zookeeper hadoop 495333240 Aug  3 14:56 snapshot.5d00011993
-rw-r--r-- 1 zookeeper hadoop 495333235 Aug  4 06:18 snapshot.5d0001e0b4
-rw-r--r-- 1 zookeeper hadoop 495326760 Aug  5 11:54 snapshot.5d0003660f
-rw-r--r-- 1 zookeeper hadoop 495335787 Aug  6 08:39 snapshot.5d00047faf
-rw-r--r-- 1 zookeeper hadoop 495335268 Aug  7 01:26 snapshot.5d000563eb

정렬해야 해요스냅 사진파일을 날짜별로 정렬하고 모두 삭제스냅 사진최근 5개의 스냅샷 파일을 제외한 파일. 스냅샷이 아닌 다른 모든 파일은 유지되어야 합니다.

모두 제거하기 위해 다음 cli 구문을 만들었습니다.스냅 사진find파일은 마지막 5개를 제외하고 날짜별로 정렬되어 있지만 이를 명령과 통합하는 방법을 정확히 모릅니다.

ls -ltr zookeeper/version-2 | grep snapshot  | head -n -5 | xargs rm -f

최종 목표는 cron 작업(crontab)에서 find 명령을 설정하는 것입니다.

예상 출력의 예

-rw-r--r-- 1 zookeeper hadoop 495333240 Aug  3 14:56 snapshot.5d00011993
-rw-r--r-- 1 zookeeper hadoop 495333235 Aug  4 06:18 snapshot.5d0001e0b4
-rw-r--r-- 1 zookeeper hadoop 495326760 Aug  5 11:54 snapshot.5d0003660f
-rw-r--r-- 1 zookeeper hadoop 495335787 Aug  6 08:39 snapshot.5d00047faf
-rw-r--r-- 1 zookeeper hadoop 495335268 Aug  7 01:26 snapshot.5d000563eb

답변1

ZooKeeper 스냅샷을 직접 삭제하면 Hadoop 클러스터에 예측할 수 없는 결과가 발생할 수 있습니다. 이 목적을 위한 특정 명령이 있습니다:

zkCleanup.sh -n 5

답변2

존재하다 zsh:

rm -f /zookeeper/version-2/snapshort.*(N.om[6,-1])

수정 시간을 om o기준으로 정렬 하면 (최신 항목 부터 )mls -t.정기적인파일을 열고 ulglob을 N활성화한 다음 맨 아래에서 6번째를 선택합니다. 파일이 6개 미만이면 인수 없이 호출되지만 불평해서는 안 됩니다.N[6,-1]rm -f

답변3

편집: 좋습니다. 이 (올바른) 댓글은 제겐 너무 많습니다. 감사해요. 나는 이것을 파헤쳤다. 사실 생각보다 어렵네요. 최소한 "파일을 찾을 수 없음" 상황은 해결되었습니다. 아무 것도 발견되지 않으면 grep은 0이 아닌 반환 코드를 생성합니다. 건배.

find /zookeeper/version-2 -type f -name 'snapshot.*' | grep . | \
xargs -I% -n1 bash -c 'ls -tr "$@" || exit 255' _ % | head -n -5 | \
xargs echo rm -v 

에코를 제거하면 실제로 에코가 제거됩니다.

네: 저도 보기 흉한 것 같아요.

관련 정보