문자 그대로 $date
7일보다 오래된 폴더와 해당 내용을 삭제하려면 어떻게 해야 합니까?파일 이름의 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 -- '{}'
이 디렉터리와 그 내용을 즉시 삭제하세요.+