我正在使用以下命令删除任何目录/文件。据我所知,如果任何目录/文件具有访问权限或任何其他问题,它将被跳过,其余文件将被删除。
find $CDIR -mtime +7 -exec rm -rfv {} \;
RETURN_CODE_CLEANUP=$?
现在,我要检查批量删除中发生了多少个错误。我认为,RETURN_CODE_CLANUP
对于一个或多个错误,将为非零。如何捕获这种方法中的任何错误?
要计算rm
产生的错误的确切数量:
find "$CDIR" -depth -mtime +7 -exec sh -c '
for pathname do
if ! rm -rfv "$pathname"; then
count=$(( count + 1 ))
fi
done
printf "This batch caused %d errors in rm\n" "$count"' sh {} +
这将对一个$CDIR
子目录及其子目录进行深度优先搜索,并在一个多星期前删除带有修改时间戳的任何文件或目录。内联shell脚本将被调用以查找找到的路径名,并对其进行迭代,尝试使用删除它rm
。如果删除失败,则将其计数。内联脚本末尾,将报告该批次的失败次数。
请注意,这是一种非常不安全的清理方法,因为如果数周内未添加或删除文件或目录,$CDIR
则将删除以root开头的整个目录结构$CDIR
。的每个子目录都存在相同的问题$CDIR
。
您可能只想删除旧文件,然后分别删除空目录:
find "$CDIR" ! -type d -mtime +7 -exec sh -c '
for pathname do
if ! rm -fv "$pathname"; then
count=$(( count + 1 ))
fi
done
printf "%d files in this batch could not be deleted\n" "$count"' sh {} +
find "$CDIR" -type d -empty -delete
(这假设您有一个find
支持-empty
和的实现-delete
,并且可以删除空目录,即使它们没有被第一个find
命令清空)
与以往一样,当测试执行此类清理的命令时,请在数据副本上运行并备份数据。
另一种(更简单的)方法是简单地删除旧文件,然后计算仍然存在的旧文件的数量。该数字将是rm
失败的次数(尽管-delete
为了简洁起见,在此使用):
find "$CDIR" ! -type d -mtime +7 -delete
find "$CDIR" ! -type d -mtime +7 -exec echo x \; | wc -l
然后,您可能还需要清理空目录,如上所述。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句