在职的

在职的

我遇到了一些麻烦,我正在尝试编写一个脚本,该脚本将创建超过 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,然后将其名称发送到管道另一端的 xargs,前提是在 tokeep 文件中找不到它。也不要进入该目录,因为它已被标记为许可。
    • OTW,file如果它们早于 $days,则删除它们。
  • xargs传递将被删除的旧目录。

答案2

我建议创建一个要删除而不是保留的文件列表。

并开始删除目录/或树文件下的文件,我会更好地解释:

按此顺序删除:

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

相关内容