Ich möchte ein Python-Programm, das ein Verzeichnis angegeben, werden alle Verzeichnisse in diesem Verzeichnis zurück, die 775 (rwxrwxr-x
) BerechtigungenCheck Berechtigungen von Verzeichnissen in Python
Dank haben!
Ich möchte ein Python-Programm, das ein Verzeichnis angegeben, werden alle Verzeichnisse in diesem Verzeichnis zurück, die 775 (rwxrwxr-x
) BerechtigungenCheck Berechtigungen von Verzeichnissen in Python
Dank haben!
Weder antworten recurses, obwohl es nicht ganz klar ist, dass das ist, was das OP will. Hier ist eine rekursive Ansatz (ungetestet, aber Sie erhalten die Idee):
import os
import stat
import sys
MODE = "775"
def mode_matches(mode, file):
"""Return True if 'file' matches 'mode'.
'mode' should be an integer representing an octal mode (eg
int("755", 8) -> 493).
"""
# Extract the permissions bits from the file's (or
# directory's) stat info.
filemode = stat.S_IMODE(os.stat(file).st_mode)
return filemode == mode
try:
top = sys.argv[1]
except IndexError:
top = '.'
try:
mode = int(sys.argv[2], 8)
except IndexError:
mode = MODE
# Convert mode to octal.
mode = int(mode, 8)
for dirpath, dirnames, filenames in os.walk(top):
dirs = [os.path.join(dirpath, x) for x in dirnames]
for dirname in dirs:
if mode_matches(mode, dirname):
print dirname
Etwas Ähnliches ist für stat in der stdlib Dokumentation beschrieben.
Muss es Python sein?
Sie können auch das tun finden verwenden:
"finden -perm 775."
Dank dieser auch helfen! –
Werfen Sie einen Blick auf das os Modul. Insbesondere os.stat, um die Erlaubnis Bits zu sehen.
import os
for filename in os.listdir(dirname):
path=os.path.join(dirname, filename)
if os.path.isdir(path):
if (os.stat(path).st_mode & 0777) == 0775:
print path
Sie könnten es kompakter und noch lesbar machen mit "if os.path.isdir (Pfad) und (os.stat (Pfad). St_mode & 0777) == 0775:" anstelle von zwei Wenns. – nosklo
Compact Generator basiert auf Brians Antwort:
import os
(fpath for fpath
in (os.path.join(dirname,fname) for fname in os.listdir(dirname))
if (os.path.isdir(fpath) and (os.stat(fpath).st_mode & 0777) == 0775))
gute Lösung, könnten Sie Int (sys.argv [2], 8) verwenden, um das Benutzer oktal direkt zu konvertieren, anstatt es in der Funktion mit der Rückkehr von stat – nosklo
Ah tun - in der Tat! Ich habe meine Antwort aktualisiert, um den gewünschten Modus in Oktal zu konvertieren, anstatt für jeden erkannten Modus den umgekehrten Weg zu gehen. Vielen Dank! –
können Sie Oktalzahlen auch direkt schreiben, wenn Sie eine 0 vor ihnen setzen, z. 0777 ergibt 511 wie int ("777", 8) – jorelli