find 명령 또는 기타 명령을 사용하여 디렉토리 삭제

find 명령 또는 기타 명령을 사용하여 디렉토리 삭제

마지막 2개의 백업만 유지하고 나머지 디렉터리는 삭제하는 명령을 작성하려고 합니다.

directory path = /apps/

다음은 디렉토리입니다. 여기에 보관하고 싶습니다.

  • source
  • source_2020-01-13
  • source_2019-12-09

디렉토리를 삭제하고 이전 디렉토리를 삭제하세요. 스크립트는 cron을 사용하여 100개 이상의 서버에서 실행됩니다.

여기서 문제는 find명령에서 이전 디렉터리를 추가하거나 제거할 수 없다는 것입니다 mtime. 이유는 백업 디렉터리 타임스탬프가 모든 서버에서 동일하지 않기 때문입니다. 기본적으로 명령/스크립트는 source_YYYY_MM_DD라는 마지막 두 개의 백업 디렉터리를 유지하고 나머지는 삭제해야 합니다.

누구든지 도와줄 수 있나요?

노트:소스_YYYY_MM_DD백업 디렉터리입니다.

drwx------ 11 root   root   4096 Jul 22  2019 source_2019-07-22
drwx------ 11 root   root   4096 Jul 29  2019 source_2019-07-29
drwx------ 11 root   root   4096 Aug  5  2019 source_2019-08-05
drwx------ 11 root   root   4096 Aug 14  2019 source_2019-08-14
drwx------ 11 root   root   4096 Oct 14  2019 source_2019-10-14
drwx------ 11 root   root   4096 Dec  9 03:59 source_2019-12-09
drwx------ 11 root   root   4096 Jan 13 05:20 source_2020-01-13
drwxr-x--- 12 root   root   4096 Apr 21 09:11 source

답변1

ls -d1 /apps/source_20??-??-??/ | head -n -2 | xargs rm -rf

그러면
ls -d1 /apps/source_20??-??-??/일치하는 디렉터리만 정렬된 순서로 나열되고
head -n -2마지막 두 항목을 가져온
xargs rm -rf다음 디렉터리가 삭제됩니다.

답변2

find /apps/ -type d -not -name source -name "source*" -print | sort | head -n -2 | xargs rm -rfv

find apps/ -type d -not -name source -name "source*" -print모든 백업 디렉토리가 발견되어 명령이 해당 source디렉토리를 선택하지 않도록 합니다 find.

sort최신 항목이 마지막인지 확인하여 정렬됩니다. 이는 수정 시간을 기준으로 하지 않고 디렉터리 이름을 기준으로 합니다.

head -n -2모든 디렉터리, 마지막 2개의 백업 디렉터리를 가져옵니다.

xargs rm -rfv이전 명령으로 필터링된 마지막 2개를 제외한 모든 백업 디렉터리를 삭제합니다.

(경고: 디렉터리 이름에 공백이 포함된 경우 이 명령은 작동하지 않습니다. 항상 가짜 디렉터리를 만들고 이 명령을 시도하여 먼저 테스트하십시오.)

관련 정보