Ich lege Dateien in mehreren/vielen CIFS-shares ab. Diese Verzeichnisse werden überwacht und ggf. ein Skript aufgerufen.
Ich versuche gerade eine Fehlerbehandlung zu verbessern.
Dazu soll in einer Mail der Name/Pfad der fehlerhaften Datei angezigt werden.
momentan bastele ich von Hand (Windows)Pfad und Name zusammen. Das wird in der Mail auch angezeigt, sogar als Verweis. prima soweit, aber momentan Handarbeit.
Gibt es irgendeinen Weg, vom Linux-Pfad einer Datei auf den Namen des CIFS-Shares zu schliessen?
Mir fiele momentan eine Tabelle mit Linux-Pda und korrespondierendem CIFS ein; scheint mir aber sehr kompliziert.
namen eines CIFS-shares ermitteln ...
Von "Hand" solltest Du nichts machen, sondern pathlib benutzen. Erster Schritt wäre, die Mounts auszulesen und dann die passenden Pfade zusammenbauen:
Code: Alles auswählen
from pathlib import Path, PureWindowsPath
mounts = []
with open("/proc/self/mounts") as lines:
for line in lines:
parts = line.split()
if parts[2] == "cifs":
mounts.append((Path(parts[1]), PureWindowsPath(parts[0])))
path = Path("/mnt/cifs/irgendeine/datei")
for linux_path, windows_path in mounts:
if path.is_relative_to(linux_path):
print(windows_path / path.relative_to(linux_path))
- __blackjack__
- User
- Beiträge: 14220
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Wäre es nicht sicherer vom Pfad der einen interessiert solange in den `parent`-Attributen hoch zu gehen bis man mit `is_mount()` den _ersten_ Mountpoint gefunden hat? Denn es könnte ja sein, dass die Datei zwar innerhalb eines gemounteten CIFS Verzeichnisses liegt, aber dort drin dann doch wieder noch was anderes gemountet wurde.
Ungetestet:
Ungetestet:
Code: Alles auswählen
with open("/proc/self/mounts", encoding="utf-8") as lines:
mountpoint_to_windows_path = {
Path(mountpoint): PureWindowsPath(windows_path)
for windows_path, mountpoint, filesystem_name, *_ in map(
str.split, lines
)
if filesystem_name == "cifs"
}
path = Path("/mnt/cifs/irgendeine/datei")
#
# Get nearest mount point going up the directory tree.
#
mountpoint = path
while not mountpoint.is_mount():
mountpoint = mountpoint.parent
assert mountpoint.is_mount()
print(
mountpoint_to_windows_path[mountpoint] / path.relative_to(mountpoint)
)“Ich bin für die Todesstrafe. Wer schreckliche Dinge getan hat, muss eine angemessene Strafe bekommen. So lernt er seine Lektion für das nächste Mal.” — Britney Spears, Interview in der französischen Zeitung Libération, 2. April 2002
