2일이 지난 특정 디렉터리 이름 아래의 모든 파일을 반복적으로 삭제합니다.

2일이 지난 특정 디렉터리 이름 아래의 모든 파일을 반복적으로 삭제합니다.

나는 다음 스크립트를 작성했습니다.

#!/bin/bash
DAYSOLD="2"
users_dir="/users"
cd $users_dir
date >> cleanup.log;  du -h --max-depth=1 | sort -hr >> cleanup.log
find $users_dir -mtime +$DAYSOLD -type f -exec rm -v {} \;

"작업 공간" 디렉터리에서 2일이 지난 파일만 삭제하고 싶습니다. 이 작업을 어떻게 수행해야 합니까?

/users/user1/workspace
/users/user2/workspace
/users/user3/workspace

도움을 주셔서 감사합니다. 이 작업을 수행하는 방법을 배우고 싶습니다.

답변1

-mtime "+$days"(마지막 수정 시간 기준) 반올림된 파일 선택아래에일수는 정수입니다.엄격하게보다 나은 $days...

2일 23시간이 지난 파일 -mtime +2은 2일이 지났고 2.

따라서 다음이 필요합니다.

find "$users_dir"/*/workspace -mtime "+$(( DAYSOLD - 1 ))" -type f -delete

$DAYSOLD을 제거하려면 다음 workspace$users_dir수행할 수도 있습니다.

find "$users_dir"/*/workspace '(' -mtime "$DAYSOLD" -o -mtime "+$DAYSOLD" ')' \
                   -type f -delete

$DAYSOLD수명(정수 일수)이 . 보다 크거나 같은 파일을 삭제합니다 $DAYSOLD.

-delete비표준 확장이지만 findUbuntu의 GNU에서 사용할 수 있으며 를 사용하는 것보다 낫습니다 -exec rm. -delete -print성공적으로 삭제된 파일 목록을 만들 수 있습니다.

기억해변수 참조cd그리고 1을 수행하기 전에 종료 상태를 확인하십시오. (cd -P -- "$users_dir" && exec du...)그렇지 않으면 du실패할 경우 잘못된 디렉토리에서 실행됩니다 cd. 또한 서브셸 사용에 유의하세요. 그렇지 않으면 $users_dir상대 경로인 경우 제대로 작동하지 않습니다. 실제로는 다음과 같이 작성하는 것이 더 합리적입니다.

cd -P -- "$users_dir" || exit
du ...
find . ...

$users_dir(심볼릭 링크라면 더 일관성이 있을 것입니다)


엄밀히 말하면 말이다.적어도 $DAYSOLD며칠 전에는그러나 비교가 나노초 정밀도로 수행되고 시작하는 데 수백 나노초가 걸린다는 점을 고려하면 find이러한 구별은 거의 의미가 없습니다.

² 엄밀히 말하면 if workspace가 비형식 파일인 경우목차, 해당 파일은 계속 전달되며 , 파일이 며칠 find이상 오래된 경우 (일반 파일인 경우 ) 해당 파일도 삭제됩니다. 이 모드 로 전환 하고 추가하여 디렉터리 유형 파일만 고려되도록 할 수 있습니다. 하다$DAYSOLD-type fzsh(/)workspace아니요추가하기만 /하면 아래의 3이 더 심각한 결과를 초래할 수 있습니다(예: /users/joe/workspace또는 에 대한 심볼릭 링크인 경우)./bin/

³ 다음에는 심볼릭 링크가 따라옵니다. 예를 들어 /users/joe심볼릭 링크인 경우 /디렉터리 /workspace의 오래된 파일이 삭제됩니다.

답변2

이것을 사용해보십시오

find $users_dir/user*/workspace -mtime +$DAYSOLD -type f -exec echo rm -v {} \;

기대한 대로 작동하면 에코가 줄어듭니다. 날짜를 자정부터 시작하는 것으로 처리하려면 -daystart를 추가하는 것이 좋습니다.

또 다른 쉬운 방법은 -path를 사용하는 것입니다.

find  $users_dir -path "$users_dir/user*/workspace/*" -mtime +$DAYSOLD -type f -exec echo rm -v {} \;

관련 정보