#!/bin/bash # findid - find invalid user ids # Copyright © 2000-2009 by Pádraig Brady
. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details, # which is available at www.gnu.org script_dir=$(dirname "$0") #directory of this script script_dir=$(readlink -f "$script_dir") #Make sure absolute path . "$script_dir"/supprt/fslver Usage() { ProgName=$(basename "$0") echo "find unused or bad file ids Usage: $ProgName [[-r] [-f] paths(s) ...] If no path(s) specified then the currrent directory is assumed." exit } for arg do case "$arg" in -h|--help|-help) Usage ;; -v|--version) Version ;; *) argsToPassOn="$argsToPassOn $(shell_quote "$arg")" ;; esac done . "$script_dir"/supprt/getfpf "$argsToPassOn" reUsers="$(cut -f3 -d: /etc/passwd | tr '\n' '|')0" reGroups="$(cut -f3 -d: /etc/group | tr '\n' '|')0" find "$@" -printf "%U:%G:$FPF\0" | sort -zu | #merge files (indirectly) specified multiple times tr '\n\0' '\1\n' | grep -Ev "^($reUsers):($reGroups):" | cut -d: -f3- | tr '\n\1' '\0\n' | #Note this find command is equivalent to the above. #However it's much slower. This really shows the #advantage of the small cohesive tools paradigm. #find $findArgs \( -nouser -o -nogroup \) -printf "$FPF\0" | if [ -p /proc/self/fd/1 ]; then cat else xargs -r0 ls -lUdb --color=auto -- fi