查找具有未定义GID的所有文件(在/ etc / group中没有条目的组)

在我们的几个CentOS 5系统中,/ etc / group文件被一个自动化的脚本消耗掉了。

因此,系统上有一些文件具有未定义的GID– GID未在/etc/group定义。 例如,下面的文件由GID 103拥有,当它属于组“mysql”时。

 # ls -ld /var/lib/mysql/mysql/user.frm -rw-rw---- 1 mysql 103 10330 Apr 1 02:47 /var/lib/mysql/mysql/user.frm 

有没有办法让我在这个系统上find所有属于未定义组的文件?

我知道我可以做这样的事情来findGID 103拥有的所有文件:

 find / -gid 103 

但是,我想查找所有由未定义的组拥有的文件。

你的版本查找没有-nogroup选项?

这是一个perl单线程:

 perl -MFile::Find -e 'find({ wanted => sub { getgrgid((stat(_))[5]) or \ print ((stat(_))[5], " $File::Find::name\n") }, follow => 1 }, "/")' 

你可以尝试一个快速和肮脏的解决scheme,

 find . -ls | gawk '$6 ~ /^[0-9]+$/ {print}' 

这绝对不是一个美丽,但应该工作。

如果你有-gid但不是-nogroup你可以使用这个或者类似的东西:

 gids=($(cut -d: -f3 /etc/group | sed 's/.*/! -gid & /')) find /dir/to/start ${gids[@]} -ls