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.

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

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

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 ....


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> 

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.