문제가 있습니다. 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