我在 下有很多用户/home
。
每个用户都有一定数量的目录,大小很大。
我将系统上创建的用户列表提取到一个没有系统用户(uid 低于 1000)的文本文件中。例如,root、ftp 和其他系统用户不在 usernames-list.txt 中
有没有一种方法可以让我们find
搜索这个 usernames-list.txt 列表并/home/
根据这两个条件访问其目录rm -rf
?
条件 1:列出修改/访问日期超过 6 个月的文件/目录。
条件 2:列出大小为 +50MB 的文件/目录。
执行:rm -f
答案1
这将列出所有访问时间超过 180 天且大小超过 50MB 的文件目录。
for name in $(cat usernames.txt); do
find /home/"$name" -type f -atime +180 -size +50M|sed 's/\/[^/]\+$//'|sort -u
done
为了删除,我xargs
在之后添加了sort
。
在我自己的 /home 中,我有一些目录名称中带有空格和单引号(为了辩护,一些 mp3 目录:))。xargs
打印了一条警告并告诉我添加-0
选项,为了修复空字符,我添加了分隔符选项-d'\n'
。
for name in $(cat usernames.txt); do
find /home/"$name" -type f -atime +180 -size +50M|sed 's/\/[^/]\+$//'|sort -u|xargs -0 -d'\n' -n1 -I{} echo -rf "{}"
done
如果您觉得一切正常,那么您可以echo
在命令rm
中替换xargs
。
可能rm
会打印错误消息,因为某些父目录将在某些子目录之前被删除。