Auf der Suche nach Dateien, die NICHT jemandem gehören

182

Ich suche rekursiv in Verzeichnissen nach Dateien, die NICHT einem bestimmten Benutzer gehören, und bin mir nicht sicher, wie ich diese schreiben soll.

mike628
quelle

Antworten:

274

Das Dienstprogramm find (1) verfügt über Primärdaten, die mit dem "!" Negiert ("umgekehrt") werden können. Operator. Bei der Eingabeaufforderung muss man der Negation jedoch mit einem Backslash entkommen, da es sich um ein Shell-Metazeichen handelt. Ergebnis:

find . \! -user foo -print
Mel
quelle
6
Das Entkommen !scheint optional zu sein
Doub1ejack
1
xargs -I{} -P3 -- ${cmdhere} {}Wenn Sie die Ausgabe an weiterleiten , kann $ {cmdhere} für jede Datei parallel ausgeführt werden. cmdhere :: = Standard-Unix-Utils; Standard Unix Utils :: = chmod, chown, stat, ls, ...
Dwight Spencer
1
@sorin meinst du das find . ...oder die Leitung zum xargsersten oder zweiten Weg?
Kev
3
find hat das Flag -exec -> find . ! -user foo -exec chown <owner>:<group> {} \;
pastephens
1
Wie füge ich Besitzerinformationen als Ausgabe hinzu?
Duc Tran
38

Auf der Suche nach Dateien, die NICHT jemandem gehören

Andere haben die Frage "NICHT im Besitz eines bestimmten Benutzers" im Körper beantwortet . Hier ist eine, die die Titelfrage beantwortet, aber nicht bereitgestellt wurde:

$ find / -nouser

Sie können es so verwenden:

$ sudo find /var/www -nouser -exec chown root:apache {} \;

Und eine verwandte:

$ find / -nogroup
jww
quelle
3
Ich werde Ihnen eine Stimme für die Technik geben, aber die Leute würden im Allgemeinen sagen "niemandem gehört", wenn sie meinten, was Sie interpretierten.
Shibumi
2
@Shibumi - Ja, klingt ungefähr richtig für diese spaltenden Haare. Das Problem war, dass ich Dateien finden musste, die buchstäblich keinem Benutzer gehörten. Es tauchte nach einer Aktualisierung und Migration des Webservers auf. Einige Benutzer- / Gruppen-IDs wurden geändert, sodass ich ein Skript für ein Chown erstellen musste.
Jww
12

-userFindet nach Benutzer oder Benutzer-ID und !invertiert das Prädikat. Also , ! -user ....

Ignacio Vazquez-Abrams
quelle
2
Herabgestuft, weil es der akzeptierten Antwort nichts hinzufügt und andere mögliche Antworten maskiert (wie das zsh glob-Muster unten).
Ulysse BN
9

Sie können dies verwenden:

find <dir> ! -user <username> 
Wachsmalstift gewalttätig
quelle
2
Herabgestuft, weil es der akzeptierten Antwort nichts hinzufügt und andere mögliche Antworten maskiert (wie das zsh glob-Muster unten).
Ulysse BN
5

Mit z-shell (zsh) können Sie verwenden

ls -laR *(^U)

oder

ls -la **/*(^U)

um rekursiv nach allen Dateien zu suchen, die Ihnen nicht gehören.

AB
quelle
Es ist wahr, dass der obige Befehl -aaufgrund der Platzhaltererweiterung keine Punktdateien auflistet, auch nicht mit dem Flag. Verwenden Sie die dotglobOption zsh, um Punktdateien abzufangen : setopt dotglob. In einer Zeile : (setopt dotglob; ls **/*(^U) ). Die Klammern müssen in einer Unterschale ausgeführt werden, damit Sie nach Abschluss nicht mehr ausgeführt werden setopt nodotglobmüssen.
Zorawar