6 Stimmen

Entfernen Sie eine Datei gewaltsam, wie bei "rm -f", oder entfernen Sie einen Dateipfad gewaltsam aus dem Verzeichnis.

Ich habe meinen Code wie folgt -

#!/usr/bin/env python
import time, glob, os, sys
from datetime import date, timedelta

try:
    dpath = sys.argv[1]+"/"
except:
    print "Verwendung: " + sys.argv[0] +" "
    sys.exit(1)
print dpath
day_minus_mtime = time.mktime(date.today().timetuple())
g = glob.glob(dpath+"*")
for f in g:
        try:
                if day_minus_mtime > os.path.getmtime(f):
                        os.remove(f)
                        print "Entfernt: "+f
        except OSError, e:
                print "Nicht in der Lage zu entfernen: "+f , e

Ich glaube, dass os.remove(datei) äquivalent zu "rm datei" in Linux ist.

Ich würde gerne die äquivalente Funktion für "rm -f datei" kennen. Erzwingt das Entfernen einer Datei oder erzwingt das Entfernen des Dateipfads vom Verzeichnis.

Außerdem versucht der obige Code, Dateien älter als heute zu löschen. Ich habe eine Situation, in der die Dateien nicht gelöscht werden, da sie aufgrund des Besitzes "schreibgeschützt" sind. Aber wenn ich "rm -f" auf dieselbe Datei verwende, wird sie gelöscht.

Ich glaube, es ist besser, eine Frage zu stellen, auch wenn sie dumm erscheint für euch selbst

5voto

Jörg Beyer Punkte 3573

Die Option --force für rm bedeutet, nicht vorhandene Dateien zu ignorieren und niemals nachzufragen, laut meiner Manpage.

Der Teil mit niemals nachzufragen ist einfach, dein Python-Entfernen fragt nicht nach, richtig?

Das Ignorieren nicht vorhandener Dateien ist auch einfach: Du könntest entweder überprüfen, ob die Datei existiert, bevor du sie entfernst. Es gibt eine kleine Wettbewerbsbedingung, da die Datei zwischen der Existenzprüfung und dem Entfernen verschwinden könnte. Oder du könntest die OSError abfangen und überprüfen, ob sie deshalb geworfen wird, weil die Datei nicht existiert (OSError: [Errno 2] Datei oder Verzeichnis nicht gefunden...). Ein weiterer Grund für den OSError könnte sein, dass die Datei, die du entfernen möchtest, kein Datei sondern ein Verzeichnis ist.

Die force-Option macht keine Berechtigungsmagie (zumindest auf meinem Linux), denke nur daran, dass das Entfernen einer Datei eine Schreiboperation auf dem Verzeichnis ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X