Linux - bash 脚本用于查找具有条件的目录

Linux - bash 脚本用于查找具有条件的目录

我在 下有很多用户/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会打印错误消息,因为某些父目录将在某些子目录之前被删除。

相关内容