find . -exec sh -c ' stat -c "%U %G" "$1" | awk -F " " "\$1==\$2" ' sh {} \; -print
Es läuft stat
für jedes Objekt und ruft seinen Besitzer und seine Gruppe ab. awk
gibt dann den Exit-Status 0
nur zurück, wenn sie sich unterscheiden. In der Tat werden nur diese gedruckt.
Anmerkungen:
- Die Leistung ist gering. Jedes Objekt benötigt ein eigenes
sh
,stat
undawk
. Ich hatte einige Ideen, um dies zu verbessern (find . -exec stat … {} + | awk …
), aber ich bin nicht sicher, ob ich sie robust genug machen kann, um mit möglichen Dateinamen mit Zeilenumbrüchen usw. arbeiten zu können. Ich entschied mich, auf Nummer sicher zu gehen. Sie können-print0
bei Bedarf verwenden. Mit diesem Ansatz können Sie auch weitere Bedingungen hinzufügenfind
. - In meinem Kubuntu
stat -c "%U %G"
gibt esUNKNOWN
UIDs (oder GIDs), die nicht in Namen übersetzt werden können. Wenn es einen BenutzerUNKNOWN
oder eine Gruppe gibtUNKNOWN
, wird dies stören, denke ich. Ein zurückkehrendes ObjektUNKNOWN UNKNOWN
wird naiv interpretiert, um übereinstimmende Besitzer und Gruppen zu haben.