피복재

피복재

문제가 있습니다. 7일보다 오래된 파일 및 디렉터리 목록을 생성하고 tokeep.list 목록에 없는 파일 및 디렉터리를 삭제하는 스크립트를 작성하려고 합니다. 내 첫 번째 문제는 nodelete 목록에 디렉토리를 넣었지만 해당 디렉토리 안에 오래된 파일이 있으면 해당 파일은 삭제되지 않는다는 것입니다. 지금까지 제가 할 수 있었던 유일한 해결책은 명령 디렉토리와 기타 파일을 실행하는 것입니다. , 그것은 매우 추악하고 나는 개발자가 아닙니다.

LogFile=/users/nordic/housekeep.log
source config.cfg
exec &> >(tee $LogFile)

echo "Starting Housekeep files at $host $timestamp"

echo "Creating list of directories to delete"

cd $dir

find $dir/* -maxdepth 1 -type d -mtime +$days > /users/nordic/todelete

if [ $? -eq 0 ]; then
    echo OK
else
    echo FAIL
fi

echo "deleting  directories to listed on todelete file"

dels=`cat  /users/nordic/todelete`
readarray -t keeps <  /users/nordic/tokeep

for keep in "${keeps[@]}"; do
    dels=`echo "$dels" | grep -v "$keep"`
done

echo "$dels" > /users/nordic/todelete

readarray -t dels < /users/nordic/todelete; for del in "${dels[@]}"; do rm -rv "$del"; done

result=$?
if [ $result -eq 0 ]; then
    echo SUCCESS |tee /users/nordic/res
else
    echo FAILED |tee /users/nordic/res
fi

find $dir/* -maxdepth 1 -type f -mtime +$days -print -delete

#SUBJECT="Automated Housekeep $host $resu"
#TO="[email protected]"
#MESSAGE="$LogFile"

#mailx -s "$SUBJECT" -r "info<[email protected]>" $TO < $MESSAGE

변수가 포함된 config.cfg 파일이 있는데, 유지하고 싶은 파일 및 디렉터리 이름 목록을 만들고 나머지는 제거하려고 합니다. 어떤 제안이라도 환영합니다.

답변1

cd "$dir" && \
find . -type d ! -name . -mtime +"$days" \
  ! -exec sh -c 'printf %s\\n "${1/./$PWD}" | grep -qFf /users/nordic/tokeep' {} {} \; \
  -print0 -prune -o -type f -mtime +"$days" -delete |\
xargs -r0 rm -r

피복재

  • cd디렉토리를 성공적으로 입력한 후. 누구의 이름이 $dir우리 안에 저장되어 있는지
  • find다음 사항을 고려하여 명령을 시작합니다 .
    • :directory
      • 이는 현재 디렉토리가 아니며 $days보다 오래되었습니다. tokeep 파일에 없으면 해당 이름이 파이프의 다른 쪽 끝에 있는 xargs로 전송됩니다. 라이센스가 있는 것으로 표시되어 있으므로 해당 디렉토리로 이동하지 마십시오.
    • OTW, file$days보다 오래된 경우 삭제하세요.
  • xargs삭제될 이전 디렉토리를 전달 합니다 .

답변2

보관하는 것보다 삭제할 ​​파일 목록을 만드는 것이 좋습니다.

디렉토리/또는 트리 파일 아래의 파일 삭제를 시작하면 더 잘 설명하겠습니다.

다음 순서로 삭제하세요.

/dir1/dir2/file2
/dir1/dir2
/dir1/file1
/dir1

관련 정보