Was wäre der beste „einzeilige“ Shell-Befehl, mit dem ich alle Dateien in einem Verzeichnis auflisten und nur die anzeigen könnte, die mir gehören?
Antwort1
Ein kurzer Einzeiler wäre:
find . -maxdepth 1 -user $USER
Wenn Sie im aktuellen Verzeichnis suchen, können Sie das weglassen .
. Wenn Sie nicht wissen, ob $USER
verfügbar ist, können Sie es durch $LOGNAME
oder ersetzen $(whoami)
.
Hinzufügen, -ls
um Dateidetails anzuzeigen, zB:
find / -maxdepth 1 -user root -ls
Wenn Sie benutzerdefinierte Flags bereitstellen möchten, ls
können Sie dies über Folgendes tun -exec
:
find / -maxdepth 1 -user root -exec ls -ld {} +
(In diesem Fall ist das -d
Flag ls
erforderlich, um Verzeichnisse als sich selbst und nicht als deren Inhalt aufzulisten.)
Antwort2
Verwenden Sie den folgenden Befehl
[username@localhost~]$ find / -user username -exec ls -l {} \; 2>/dev/null
Suche alle Dateien im gesamten System, die dem Benutzernamen gehören. Wenn Sie in einem bestimmten Verzeichnis suchen, ersetzen Sie einfach den Speicherort durch / .
[username@localhost~]$ find /path/of/direcotry -user username -exec ls -l {} \; 2>/dev/null
NB:2>/dev/null macht die Fehlerausgabe ungültig.
Antwort3
Da du das Format der Ausgabe nicht angegeben hast, könntest du dies auch mit ls und grep tun:
ls -lG | grep username
Zuerst verwenden wir ls mit dem Parameter -l, um die Liste zu erhalten, die Benutzernamen und Gruppennamen enthält.
Anschließend entfernen wir mit dem Parameter -G den Gruppennamen aus dem Ergebnis.
Danach leiten wir es einfach an grep weiter und erhalten alle Ergebnisse mit dem gewünschten Benutzernamen.
BEARBEITEN: Wie in den Kommentaren erwähnt, ist dieskein Safeoder eine absolut sichere Lösung - je nach Ihren Umständen kann es jedoch auch eine schnelle und einfache Lösung sein. Interaktiv kann es akzeptabel sein, aber Sie sollten es in keinem Skript verwenden!
Antwort4
Mit zsh
können Sie dies mithilfe derGlob-Qualifiziereru
:
u
AusweisDateien im Besitz der Benutzer-IDAusweiswenn es sich um eine Zahl handelt. AndernfallsAusweisgibt einen Benutzernamen an: Das Zeichen nach '
u
' wird als Trennzeichen verwendet und die Zeichenfolge zwischen diesem und dem nächsten übereinstimmenden Trennzeichen wird als Benutzername verwendet. Die Starttrennzeichen '[
', '{
' und '<
' entsprechen den Endtrennzeichen ']
', '}
' und '>
'; jedes andere Zeichen entspricht sich selbst. Die ausgewählten Dateien sind diejenigen, die diesem Benutzer gehören. Beispielsweise wählt 'u:foo:
' oder 'u[foo]
' Dateien aus, die dem Benutzer 'foo
' gehören.
also zB mit BenutzerID
print -rl ./*(u1027)
oder mit Benutzernamen
print -rl ./*(u_yourusernamegoeshere_)
Wie üblich können Sie es mit anderen Qualifikatoren, Modifikatoren usw. kombinieren, um beispielsweise nur normale Dateien aufzulisten, versteckt oder nicht, die dem Benutzer gehören UID
1027
und nach ihrem sortiert sind mtime
:
print -rl ./*(.Domu1027)