이름에 N일이 지난 YYYYMMDD가 포함된 하위 디렉터리 삭제

이름에 N일이 지난 YYYYMMDD가 포함된 하위 디렉터리 삭제

문자 그대로 $date7일보다 오래된 폴더와 해당 내용을 삭제하려면 어떻게 해야 합니까?파일 이름의 YYYYMMDD에 따르면메타데이터 날짜 대신? 내가 (간결하게 하기 위해 일부는 생략했습니다) 다음을 수행했다고 가정해 보겠습니다.

20170817
20170823
20170828
20170901

결국 다음 폴더가 생성됩니다(이 폴더는 그대로 유지되어야 함).

20170828
20170901

7일 전 날짜를 저장하는 변수를 만들었습니다. dt_prev=$(date -d "`date`-7days" +%Y%m%d)

내 생각은 ls -l이러한 폴더 이름을 나열하고 한 줄씩 비교하는 것이었지만 여기에는 목록 정리 등이 포함되며 더 쉬운 방법이 있어야 한다고 생각했습니다.

답변1

솔루션이 더 간단한 버전이라고 생각합니다.게시자: 글렌 잭맨,예를 들어

seven_days=$(date -d "7 days ago" +%Y%m%d)
for f in [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]; do
   [ -d "$f" ] || continue
   (( $f < $seven_days )) && echo rm -r "$f"
done

echo결과가 정확해 보이면 삭제하세요.

-d테스트를 통해 디렉토리만 확인(삭제)할 수 있습니다.

답변2

당신은해야하지분석하다ls, 다음과 같이 할 수 있습니다.

for f in *; do test "$f" -lt "$date" && do something; done

귀하의 예를 들어, 다음 디렉토리 및 date=20170825:

$ ls
20170817  20170823  20170828  20170901
$ for f in *; do test "$f" -lt "$date" && echo "$f"; done
20170817
20170823

답변3

단일 find명령을 사용하십시오.

date_week_ago=$(date -d "7 days ago" +%Y%m%d)
find . -type d -regextype posix-extended -regex '.*/[0-9]{8}$' \
       -exec bash -c 'd=$(basename {}); (( '$date_week_ago' > $d )) && rm -rf "$d"' \;

답변4

find명령을 사용하면 됩니다 .

find . -type d ! \( -name "$(date -d "-7 days" +%Y%m%d)" \
    $(eval printf "%s" "\" -o -name \
   \$(date -d -"{6..0}"days +%Y%m%d)\"") -o -name . \) -exec rm -rf -- '{}' +
  • 오직-type d
  • 이름이 7일 이상 지난 이사만 가능합니다.
  • rm -rf -- '{}'이 디렉터리와 그 내용을 즉시 삭제하세요.+

관련 정보