Å rutinemessig rydde opp i filsystemet manuelt er en kjedelig og ineffektiv oppgave. Det er mye bedre å automatisere denne prosessen.
Manuell sletting av filer og mapper er sjelden givende, og det er derfor en god idé å automatisere dette.
Python er et fantastisk verktøy som kan gjøre livet enklere. Det er et kraftig programmeringsspråk for skripting, og vi skal bruke det til å effektivt løse denne oppgaven. Før vi går i gang, la oss se hvorfor Python er et godt valg for dette.
- Python er et allsidig språk for automatisering av rutineoppgaver.
- Det krever mindre kode sammenlignet med mange andre programmeringsspråk.
- Python er kompatibelt med de fleste operativsystemer som Windows, Linux og macOS, slik at samme kode kan kjøres på tvers av plattformer.
- Python har en modul kalt
os
som gir grensesnitt til operativsystemet. Vi skal bruke denne modulen for å automatisere sletting av filer og mapper.
Med Python kan vi automatisere alle de repeterende systemoppgavene som er irriterende å gjøre manuelt. Å skrive skript for å utføre spesifikke systemoppgaver er enkelt om du behersker Python. La oss ta en titt på et par eksempler.
Merk: Eksemplene er testet med Python 3.6 og nyere.
Fjerning av filer/mapper eldre enn et gitt antall dager
Det er ofte behov for å fjerne gamle loggfiler eller andre filer for å frigjøre lagringsplass.
os
-modulen inneholder metoden stat
som returnerer detaljer om filens siste tilgangstid (st_atime
), endringstid (st_mtime
) og metadata endringstid (st_ctime
). Disse metodene returnerer tid i sekunder siden epoken. Du finner mer informasjon om epoken her.
Vi skal også bruke metoden os.walk(path)
som lar oss gå gjennom undermapper i en gitt mappe.
Følg disse stegene for å skrive kode som sletter filer og mapper basert på alder:
- Importer modulene
time
,os
ogshutil
. - Definer variabeler for stien og antall dager.
- Konverter antall dager til sekunder ved å bruke
time.time()
-metoden. - Sjekk om stien eksisterer ved hjelp av
os.path.exists(path)
. - Hvis stien eksisterer, får du en liste over filer og mapper, inkludert undermapper.
os.walk(path)
returnerer en generator med mapper, filer og undermapper. - Lag en full sti til filen eller mappen ved å kombinere gjeldende sti og fil-/mappenavn med
os.path.join()
. - Hent
ctime
fraos.stat(path)
ved å bruke attributtetst_ctime
. - Sammenlign
ctime
med den beregnede tiden. - Hvis resultatet er større enn de ønskede dager, sjekk om det er en fil eller mappe. Bruk
os.remove(path)
for filer ogshutil.rmtree()
for mapper. - Hvis stien ikke eksisterer, print en feilmelding.
La oss se koden i detalj:
# importere nødvendige moduler
import os
import shutil
import time
# hovedfunksjon
def main():
# initialiserer tellere
slettede_mapper_teller = 0
slettede_filer_teller = 0
# spesifiserer stien
sti = "/STI_TIL_SLETTE"
# spesifiserer antall dager
dager = 30
# konverterer dager til sekunder
sekunder = time.time() - (dager * 24 * 60 * 60)
# sjekker om stien eksisterer
if os.path.exists(sti):
# itererer over alle mapper og filer i stien
for rot_mappe, mapper, filer in os.walk(sti):
# sammenligner alderen
if sekunder >= hent_fil_eller_mappe_alder(rot_mappe):
# fjerner mappen
fjern_mappe(rot_mappe)
slettede_mapper_teller += 1
break
else:
# sjekker mapper fra rotmappen
for mappe in mapper:
mappe_sti = os.path.join(rot_mappe, mappe)
if sekunder >= hent_fil_eller_mappe_alder(mappe_sti):
fjern_mappe(mappe_sti)
slettede_mapper_teller += 1
# sjekker filer i gjeldende mappe
for fil in filer:
fil_sti = os.path.join(rot_mappe, fil)
if sekunder >= hent_fil_eller_mappe_alder(fil_sti):
fjern_fil(fil_sti)
slettede_filer_teller += 1
else:
# hvis stien ikke er en mappe
if sekunder >= hent_fil_eller_mappe_alder(sti):
fjern_fil(sti)
slettede_filer_teller += 1
else:
print(f'"{sti}" ble ikke funnet')
slettede_filer_teller += 1
print(f"Antall slettede mapper: {slettede_mapper_teller}")
print(f"Antall slettede filer: {slettede_filer_teller}")
def fjern_mappe(sti):
if not shutil.rmtree(sti):
print(f"{sti} er fjernet")
else:
print(f"Klarte ikke slette {sti}")
def fjern_fil(sti):
if not os.remove(sti):
print(f"{sti} er fjernet")
else:
print(f"Klarte ikke slette {sti}")
def hent_fil_eller_mappe_alder(sti):
ctime = os.stat(sti).st_ctime
return ctime
if __name__ == '__main__':
main()
Du må justere følgende to variabler i koden basert på dine behov:
dager = 30
sti = "/STI_TIL_SLETTE"
Slette filer større enn et gitt antall GB
La oss se hvordan vi finner og sletter filer som er større enn en bestemt størrelse. Dette ligner på det forrige skriptet, men i stedet for alder, bruker vi filstørrelse som parameter.
# importerer os modulen
import os
def hent_fil_størrelse(sti):
størrelse = os.path.getsize(sti)
return størrelse
def fjern_fil(sti):
if not os.remove(sti):
print(f"{sti} er slettet")
else:
print(f"Klarte ikke slette {sti}")
def main():
sti = "SKRIV_INN_STI_HER"
størrelse = 500
if os.path.exists(sti):
størrelse = størrelse * 1024 * 1024
for rot_mappe, mapper, filer in os.walk(sti):
for fil in filer:
fil_sti = os.path.join(rot_mappe, fil)
if hent_fil_størrelse(fil_sti) >= størrelse:
fjern_fil(fil_sti)
else:
if os.path.isfile(sti):
if hent_fil_størrelse(sti) >= størrelse:
fjern_fil(sti)
else:
print(f"{sti} eksisterer ikke")
if __name__ == '__main__':
main()
Juster disse to variablene:
sti = "SKRIV_INN_STI_HER"
størrelse = 500
Fjerne filer med en bestemt filtype
Noen ganger vil du kanskje slette filer basert på filtype, f.eks. alle .log
-filer. Dette kan du gjøre ved å bruke os.path.splitext(path)
som returnerer en tuppel med sti og filtype.
# importerer os modulen
import os
def main():
sti = "STI_TIL_FILER"
filtype = ".log"
if os.path.exists(sti):
if os.path.isdir(sti):
for rot_mappe, mapper, filer in os.walk(sti):
for fil in filer:
fil_sti = os.path.join(rot_mappe, fil)
fil_utvidelse = os.path.splitext(fil_sti)[1]
if filtype == fil_utvidelse:
if not os.remove(fil_sti):
print(f"{fil_sti} slettet")
else:
print(f"Klarte ikke slette {fil_sti}")
else:
print(f"{sti} er ikke en mappe")
else:
print(f"{sti} eksisterer ikke")
if __name__ == '__main__':
main()
Husk å oppdatere sti
og filtype
i koden slik at de passer dine behov.
Det er lurt å teste skriptene i et ikke-produksjonsmiljø. Når du er fornøyd med resultatene kan du planlegge dem via cron (hvis du bruker Linux) for å kjøre dem regelmessig for vedlikehold. Python er fantastisk for å automatisere slike oppgaver, og hvis du vil lære mer, sjekk ut dette Udemy-kurset.
Likte du denne artikkelen? Del den gjerne med andre!