Jak tworzyć i manipulować archiwami smoły za pomocą Pythona
- 1639
- 290
- Igor Madej
W systemie Linux i innych systemów operacyjnych podobnych do UNIX TAR jest niewątpliwie jednym z najczęściej używanych narzędzi archiwizacji; Pozwól nam tworzyć archiwa, często nazywane „Tarballs”, możemy użyć do celów dystrybucji kodu źródłowego lub tworzenia kopii zapasowych. W tym samouczku zobaczymy, jak czytać, tworzyć i modyfikować archiwa TAR za pomocą Pythona, używając Tarfile
moduł.
W tym samouczku nauczysz się:
- Tryby, w których archiwum smoły można otworzyć za pomocą modułu Tarfile
- Jakie są klasy Tarinfo i Tarfile i co reprezentują
- Jak wymienić zawartość archiwum smoły
- Jak wyodrębnić zawartość archiwum smoły
- Jak dodać pliki do archiwum smoły
Zastosowane wymagania i konwencje oprogramowania
Kategoria | Wymagania, konwencje lub wersja oprogramowania |
---|---|
System | Niezależny od rozkładu |
Oprogramowanie | Python3 |
Inny | Podstawowa znajomość programowania Python3 i obiektowego |
Konwencje | # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny |
Podstawowe użycie
Tarfile Moduł jest zawarty w bibliotece Standard Python, więc nie musimy go instalować osobno; Aby go użyć, musimy tylko „zaimportować”. Zalecanym sposobem dostępu do tarbball za pomocą tego modułu jest przez otwarty
funkcjonować; W najbardziej podstawowym użyciu musimy zapewnić, jako pierwsze i drugie argumenty:
- Nazwa Tarball, do której chcemy uzyskać dostęp
- Tryb, w którym należy go otworzyć
„Tryb” używany do otwarcia archiwum smoły zależy od akcji, którą chcemy wykonać i od typu kompresji (jeśli istnieje) w użyciu. Zobaczmy je razem.
Otwieranie archiwum w trybie tylko do odczytu
Jeśli chcemy zbadać lub wyodrębnić zawartość archiwum TAR, możemy użyć jednego z następujących trybów, aby otworzyć go tylko do odczytu:
Tryb | Oznaczający |
---|---|
'R' | Tryb tylko odczyt - Typ kompresji zostanie automatycznie obsługiwany |
'R:' | Tryb tylko do odczytu bez kompresja |
„R: GZ” | Tryb tylko do odczytu - zamek błyskawiczny Kompresja wyraźnie określona |
„R: BZ2” | Tryb tylko do odczytu - BZIP Kompresja wyraźnie określona |
„R: xz” | Tryb tylko do odczytu - LZMA Kompresja wyraźnie określona |
W większości przypadków, w których można łatwo wykryć metodę kompresji, zalecany tryb do użycia jest 'R'.
Otwarcie archiwum do dołączania plików
Jeśli chcemy dołączyć pliki do istniejącego archiwum, możemy użyć 'A' tryb. Ważne jest, aby zauważyć, że możliwe jest dołączenie do archiwum tylko wtedy, gdy nie jest skompresowane; Jeśli spróbujemy otworzyć skompresowane archiwum w tym trybie, a ValueerRor
Wyjątek zostanie podniesiony. Jeśli odniesiemy się do nieistniejącego archiwum, zostanie utworzone w locie.
Otwieranie archiwum do pisania
Jeśli chcemy wyraźnie stworzyć nowy archiwum i otworzyć go do pisania, możemy użyć jednego z następujących trybów:
Tryb | Oznaczający |
---|---|
„W” | Otwórz archiwum do pisania - nie używaj kompresji |
„W: GZ” | Otwórz archiwum do pisania - Użyj gzip kompresja |
„W: BZ” | Otwórz archiwum do pisania - Użyj BZIP2 kompresja |
„W: xz” | Otwórz archiwum do pisania - Użyj LZMA kompresja |
Jeśli istniejący plik archiwum jest otwarty do pisania, jest on obcięty, więc cała jego treść jest odrzucana. Aby uniknąć takich sytuacji, możemy chcieć otworzyć archiwum wyłącznie, jak opisano w następnym rozdziale.
Utwórz archiwum tylko wtedy, gdy nie istnieje
Kiedy chcemy mieć pewność, że istniejący plik nie jest zastąpiony podczas tworzenia archiwum, musimy go otworzyć wyłącznie. Jeśli używamy 'X' tryb i plik o tej samej nazwie tego, który określono dla archiwum, a FileExistSerror
zostanie podniesiony. Metody kompresji można określić w następujący sposób:
Tryb | Oznaczający |
---|---|
'X' | Utwórz archiwum bez kompresji, jeśli nie istnieje |
„X: GZ” | Utwórz archiwum z gzip Kompresja tylko wtedy, gdy nie istnieje |
„X: BZ2” | Utwórz archiwum z BZIP2 Kompresja tylko wtedy, gdy nie istnieje |
„x: xz” | Utwórz archiwum z LZMA Kompresja tylko wtedy, gdy nie istnieje |
Praca z archiwami
Istnieją dwie klasy dostarczane przez Tarfile
moduł używany do interakcji z archiwami smoły i ich zawartością, i są odpowiednio: Tarfile
I Tarinfo
. Ten pierwszy służy do reprezentowania archiwum smoły w całości i może być używany jako Menedżer kontekstowy z Pythonem z
Oświadczenie, ten ostatni służy do reprezentowania członka archiwum i zawiera różne informacje o nim. Jako pierwszy krok skupimy się na niektórych z najczęściej używanych metod Tarfile
Klasa: Możemy ich użyć do wykonywania wspólnych operacji w archiwach TAR.
Odzyskanie listy członków archiwum
Aby pobrać listę członków archiwum, możemy użyć Getmembers
Metoda a Tarfile
obiekt. Ta metoda zwraca listę Tarinfo
obiekty, jeden dla każdego członka archiwum. Oto przykład jego użycia z manekinem skompresowanego archiwum zawierającego dwa pliki:
>>> Z Tarfile.Otwórz archiwum.smoła.gz ', „r”) jako archiwum: ... archiwum.getMembers () ... [[[, ]
Kopiuj Jak zobaczymy później, możemy uzyskać dostęp do niektórych atrybutów zarchiwizowanego pliku, jako czas własności i modyfikacji, za pośrednictwem odpowiedniego Tarinfo
Właściwości i metody obiektu.
Wyświetlanie zawartości archiwum smoły
Jeśli tylko chcemy wyświetlić zawartość archiwum smoły, możemy otworzyć ją w trybie odczytu i użyć lista
Metoda Tarfile
klasa.
>>> Z Tarfile.Otwórz archiwum.smoła.gz ', „r”) jako archiwum: ... archiwum.lista() ... ?RW-R-R-EGDOC/EGDOC 0 2020-05-16 15:45:45 File1.tekst ?RW-R-R-EGDOC/EGDOC 0 2020-05-16 15:45:45 File2.tekst
Kopiuj Jak widać listę plików zawartych w archiwum, jest wyświetlana jako wyjście. lista
Metoda akceptuje parametr pozycyjny, gadatliwy który jest PRAWDA
domyślnie. Jeśli zmienimy jego wartość na FAŁSZ
, Tylko nazwy plików zostaną zgłoszone na wyjściu, bez żadnych dodatkowych informacji.
Metoda akceptuje również opcjonalny parametr nazwany, członkowie. Jeśli jest używany, podany argument musi być podzbiorem listy Tarinfo
obiekty zwracane przez Getmembers
metoda. Tylko informacje o określonych plikach zostaną wyświetlone, jeśli ten parametr jest używany i podano prawidłową wartość.
Wyodrębnienie wszystkich członków z archiwum smoły
Kolejną bardzo powszechną operacją, którą możemy chcieć wykonać w archiwum TAR, jest wyodrębnienie całej jego treści. Aby wykonać taką operację, możemy użyć Wypakuj wszystko
metoda odpowiadających Tarfile
obiekt. Oto, co byśmy napisali:
>>> Z Tarfile.Otwórz archiwum.smoła.gz ', „r”) jako archiwum: ... archiwum.Wypakuj wszystko()
Kopiuj Pierwszy parametr zaakceptowany metodą jest ścieżka: używał do określenia, gdzie należy wyodrębnić członków archiwum. Wartość domyślna to '.'
, Tak więc członkowie są wyodrębnione w bieżącym katalogu roboczym.
Drugi parametr, członkowie, może być użyte do określenia podzbioru członków do wyodrębnienia z archiwum i, jak w przypadku lista
metoda, powinna to być podzbiór listy zwróconej przez Getmembers
metoda.
Wypakuj wszystko
Metoda ma również nazwany parametr, numeric_owner. To jest FAŁSZ
Domyślnie: jeśli zmienimy to na PRAWDA
, numeryczne UID I kołowacizna zostanie użyty do ustawienia własności wyodrębnionych plików zamiast nazw użytkownika i grup.
Wyodrębnienie tylko jednego członka z archiwum
Co jeśli chcemy wyodrębnić tylko jeden plik z archiwum? W takim przypadku chcemy użyć wyciąg
Metoda i odniesienie pliku, który powinien być wyodrębniony przez ITS nazwa (Lub jako Tarfile
obiekt). Na przykład, aby wyodrębnić tylko plik 1.tekst
Plik z Tarball, uruchomimy:
>>> Z Tarfile.Otwórz archiwum.smoła.gz ', „r”) jako archiwum: ... archiwum.wyodrębnia („File1.tekst')
Kopiuj Łatwe, prawda?? Plik jest domyślnie wyodrębniony w bieżącym katalogu roboczym, ale inną pozycję można określić przy użyciu drugiego parametru zaakceptowanego metodą: ścieżka.
Zwykle atrybuty, które plik ma wewnątrz archiwum, są ustawione po wyodrębnianiu systemu plików; Aby uniknąć tego zachowania, możemy ustawić trzeci parametr funkcji, set_attrs, Do FAŁSZ
.
Metoda akceptuje również numeric_owner parametr: użycie jest takie samo, jak widzieliśmy w kontekście Wypakuj wszystko
metoda.
Wyodrębnienie członka archiwum jako obiektu podobnego do pliku
Widzieliśmy, jak, używając Wypakuj wszystko
I wyciąg
Metody możemy wyodrębnić jeden lub wiele członków archiwum TAR do systemu plików. Tarfile
Moduł zapewnia kolejną metodę ekstrakcji: Wypakuj plik
. Po zastosowaniu tej metody określony plik nie jest wyodrębniony do systemu plików; Zamiast tego zwracany jest obiekt podobny do pliku tylko do odczytu:
>>> Z Tarfile.Otwórz archiwum.smoła.gz ', „r”) jako archiwum: ... fileobj = archiwum.wyodrębnij plik („plik 1.tekst') ... FileOBJ.Wisły () ... FileOBJ.Czytać() ... FAŁSZ B'HELLO \ NWORLD \ N '
Kopiuj Dodawanie plików do archiwum
Do tej pory widzieliśmy, jak uzyskać informacje o archiwum i jego członkach oraz o różnych metodach, których możemy użyć do wyodrębnienia jego treści; Teraz nadszedł czas, aby zobaczyć, jak możemy dodać nowych członków.
Najłatwiejszym sposobem, w jaki możemy użyć do dodania pliku do archiwum, jest użycie dodać
metoda. Odwołujemy się do pliku, który ma być zawarty w archiwum przez nazwa, który jest pierwszym parametrem zaakceptowanym metodą. Plik zostanie zarchiwizowany o swoją oryginalną nazwę, chyba że określamy alternatywną przy użyciu drugiego parametru pozycji: ArcName. Załóżmy, że chcemy dodać plik 1.tekst
do nowego archiwum, ale chcemy go przechowywać jako Archivive_file1.tekst
; Napisalibyśmy:
>>> Z Tarfile.Open („New_archive.smoła.gz ', „w”) jako archiwum: ... archiwum.Dodaj („File1.txt ', „Archived_file1.tekst') ... archiwum.lista() ... -RW-R-R-EGDOC/EGDOC 12 2020-05-16 17:49:44 Archivived_File1.tekst
Kopiuj W powyższym przykładzie stworzyliśmy nowe nieskompresowane archiwum za pomocą „W” tryb i dodano plik 1.tekst
Jak Archive_file1.tekst
, Jak widać, wyjście lista()
.
Katalogi można archiwizować w ten sam sposób: domyślnie są dodawane rekurencyjnie, więc wraz z ich treścią. To zachowanie można zmienić, ustawiając trzeci parametr pozycji zaakceptowany przez dodać
metoda, rekurencyjny, Do FAŁSZ
.
Co jeśli chcemy zastosować filtr, aby tylko określone pliki były zawarte w archiwum? W tym celu możemy użyć opcjonalnie filtr nazwany parametr. Wartość przekazana do tego parametru musi być funkcją, która zajmuje Tarinfo
obiekt jako argument i zwraca wspomniany obiekt, jeśli musi być zawarty w archiwum, lub Nic
Jeśli musi zostać wykluczony. Zobaczmy przykład. Załóżmy, że mamy trzy pliki w naszym bieżącym katalogu roboczym: plik 1.tekst
, plik2.tekst
I plik 1.MD
. Chcemy dodać tylko pliki z .tekst
rozszerzenie archiwum; Oto, co moglibyśmy napisać:
>>> Importuj OS >>> Importuj Tarfile >>> Z Tarfile.Open („New_archive.smoła.gz ', „w”) jako archiwum: ... bo w OS.Listdir (): ... archiwum.Dodaj (i, filtr = Lambda X: x If x.nazwa.koniec ('.txt ') else brak) ... archiwum.lista() ... -RW-R-R-EGDOC/EGDOC 0 2020-05-16 18:26:20 File2.TXT -RW-R-R-- EGDOC/EGDOC 0 2020-05-16 18:22:13 Plik 1.tekst
Kopiuj W powyższym przykładzie użyliśmy OS.Listdir
metoda uzyskania listy plików zawartych w bieżącym katalogu roboczym. Iterując wspomnianą listę, użyliśmy dodać
metoda dodania każdego pliku do archiwum. Przeszliśmy funkcję jako argument filtr parametr, w tym przypadku anonimowy, a lambda. Funkcja przyjmuje obiekt Tarfile jako argument (x) i zwraca go, jeśli jego nazwa (nazwa jest jedną z właściwości Tarinfo
obiekt) kończy się „.tekst". Jeśli tak nie jest, funkcja zwraca Nic
Więc plik nie jest zarchiwizowany.
Obiekt Tarinfo
Nauczyliśmy się już, że Tarinfo
Obiekty reprezentują członek archiwum TAR: przechowuje atrybuty pliku odwołanego i zawiera niektóre metody, które mogą pomóc nam zidentyfikować sam typ pliku. Tarinfo
Obiekt nie zawiera rzeczywistych danych pliku. Niektóre atrybuty Tarinfo
Obiekt to:
- Nazwa (nazwa pliku)
- rozmiar (rozmiar pliku)
- MTime (czas modyfikacji pliku)
- UID (identyfikator użytkownika właściciela pliku)
- GID (identyfikator grupy plików)
- niezamazja (nazwa użytkownika właściciela pliku)
- gname (nazwa grupy plików)
Obiekt ma również kilka bardzo przydatnych metod, oto niektóre z nich:
- ISFILE () - Zwraca true, jeśli plik jest zwykłym plik, Fałsz w przeciwnym razie
- isdir () - Zwraca true, jeśli plik jest katalogiem, False inaczej
- ISSYM () - Zwraca true, jeśli plik jest łącznikiem symbolicznym, w przeciwnym razie Fałsz w przeciwnym razie
- isblk () - Zwraca true, jeśli plik jest urządzeniem blokowym, w przeciwnym razie Fałsz w przeciwnym razie
Wnioski
W tym samouczku nauczyliśmy się podstawowego użycia Tarfile
Moduł Pythona i widzieliśmy, jak możemy go użyć do pracy z archiwami smoły. Widzieliśmy różne tryby pracy, co Tarfile
I Tarinfo
Klasy reprezentują, a niektóre z najczęściej używanych metod do wymienienia zawartości archiwum, dodawania nowych plików lub ich wyodrębnienia. Dla bardziej dogłębnej wiedzy o Tarfile
Moduł, przyjrzyj się oficjalnej dokumentacji modułu
Powiązane samouczki Linux:
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Rzeczy do zainstalowania na Ubuntu 20.04
- Mastering Bash Script Loops
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Zagnieżdżone pętle w skryptach Bash
- Ubuntu 22.04 Kopia zapasowa i przywracanie systemu
- Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
- Jak tworzyć przyrostowe i różnicowe kopie zapasowe z TAR
- Jak tworzyć i wyodrębnić archiwa CPIO na przykładach Linux
- Wprowadzenie do kopii zapasowej Borg