Abstrakcja nad systemem plików?

1

Problem dotyczy systemu plików. Mogą być inne operacje na systemie plików niż niżej opisana.
Mianowicie w systemie Linux wykonuję skryptem kopię zapasową ważnych plików.

Obecnie mam w skrypcie wyliczone ścieżki do katalogów, które mają być zarchiwizowane. Dodatkowo przed archiwizacją wykonuję w skrypcie polecenia czyszczenia tych katalogów (np. make clean). To czyszczenie jest wykonywane tylko dla katalogów, w których powstają pliki wynikowe z make build. Jeśli w danym projekcie pliki wynikowe powstają w osobnym katalogu, to zamiast czyszczenia mam dodane wykluczenie tego katalogu. Nie chcę dodawać globalnego wykluczenia typów plików (np. takich jak *.o), ponieważ pewne z tych plików są źródłowymi w innych projektach (np. generuję pliki *.c z *.cx, więc musiałbym globalnie wykluczyć *.c, podczas gdy są one źródłowymi w innych projektach).

Jednak zarządzanie taką listą wyliczonych katalogów do archiwizacji, listą czyszczenia i listą katalogów wykluczonych — jest niewygodne i podatne na błędy. Chciałbym móc, przeglądając w menedżerze plików katalogi, widzieć, które mają być archiwizowane, a które nie, oraz gdzie wykonuje się czyszczenie katalogów. Ponadto chciałbym móc zmieniać w menedżerze plików nazwy katalogów bez utraty powiązania z archiwizacją (bez konieczności modyfikacji list w skrypcie).
Zakładam, że nie ma odpowiedniego programu do tego typu problemu, więc mógłbym spróbować utworzyć własny, dlatego zadaję pytanie w tej kategorii.

Jak traktować ścieżkę w systemie plików, skoro chcę zmieniać nazwy katalogów, a także przenosić je? Nie jest ona więcej identyfikatorem.

Myślę też o innym zastosowaniu: jeśli wszystkie katalogi projektów były w jednym katalogu, a użytkownik widziałby w menedżerze plików grupy projektów przechowywane w innym pliku konfiguracyjnym. Można sobie przypomnieć bodajże z programu Norton Commander pliki “dirinfo” znajdujące się w katalogu i będące tekstowymi opisami tego katalogu. Ja chciałbym zrobić coś takiego, ale dla skryptu, w sposób zautomatyzowany.

Na koniec pytania:

  1. Czy jest gotowy program, który tak działa?
  2. W jaki sposób traktować ścieżki systemu plików, skoro nie są identyfikatorami?
  3. Jak i gdzie przechowywać informacje o archiwizacji?
  4. Jakie są inne operacje na systemie plików, które by korzystały z tego podejścia?

Z tych pytań kluczowe jest 2., ponieważ chciałbym móc widzieć i zarządzać archiwizacją jak i grupami projektów w menedżerze plików.

1

Brzmi jak CACHEDIR.TAG - wiele programów (np. Borg) da się skonfigurować tak, aby ignorowały katalogi w których znajduje się taki marker-plik.

1

@overcq: Nie jestem pewien czy dobrze zrozumiałem to co chcesz uzyskać. Ale może coś takiego jak atrybuty plików albo rozszerzone atrybuty pomogłyby tutaj?

W tym manualu przyjrzyj się atrybutowi 'd':
https://man7.org/linux/man-pages/man1/chattr.1.html

A ten manual opisuje jak ustawiać rozszerzone atrybuty:
https://man7.org/linux/man-pages/man1/setfattr.1.html

Być może to byłoby jakieś rozwiązanie tego problemu - bo może dałoby się pozaznaczać tylko te katalogi i pliki, które chcesz archiwizować a resztę pomijasz. Wtedy odpada problem np. tego że katalog zmienił swoją nazwę bo jeśli ustawisz sobie np. rozszerzony atrybut na nim to po zmianie nazwy katalogu ten atrybut będzie zachowany.
O to chodziło?

Odpowiedzi na pytania:

  1. Osobiście nie znam takiego gotowego programu. Ale chyba dałoby się to rozwiązać na własną rękę skryptem.
  2. Tak jak sam pisałeś chciałbyś zmieniać nazwy katalogów bez utraty informacji o tym, że dany katalog ma być zarchiwizowany więc tutaj pewnie rozszerzone atrybuty mógłbyś wykorzystać.
  3. W rozszerzonych atrybutach.
  4. Rozszerzone atrybuty.
0

Atrybut “d” ma akurat odwrotne znaczenie, ale rozszerzone atrybuty mogą rozwiązać problem archiwizacji.
Ok. Myślę nad czymś takim:
Pewne katalogi w systemie plików miałyby oznaczenie jako ‛top‐katalogi do archiwizacji’. Trzeba by przeszukać system plików i dodać je do listy ścieżek do archiwizacji.
W tych katalogach byłyby inne katalogi, które można by oznaczyć jako wyjątki z archiwizacji.
I jeszcze była by opcjonalna lista masek wykluczeń w wybranych katalogach; wtedy nie musiałbym robić make clean.

Chodzi o to, by domyślnie nie było archiwizacji na plikach utworzonych przez cokolwiek w systemie, chyba że znajdują się w katalogach do archiwizacji. Ponieważ domyślnie pliki są tworzone bez atrybutów.

BorgBackup jest ciekawym programem, może go użyję. Tylko nie wiem jak z jego niezawodnością odtwarzania kopii bezpieczeństwa. Ale ma opcje włączeń i wykluczeń z list.

Natomiast pozostaje jeszcze drugi problem: jak wyświetlać grupy projektów. Wydaje się, że do tego trzeba by zrobić specjalne zachowanie do wyświetlania w menedżerze plików wybranych katalogów. Tak jak to jest zrobione w Windows dla specjalnych katalogów.

Dzięki za pomoc. Myślę, że z ‘backupem’ przejdę na wyższy poziom. :-)

0
overcq napisał(a):
  1. W jaki sposób traktować ścieżki systemu plików, skoro nie są identyfikatorami?

Jako referencje do zasobów, nic ponadto

Jednak zarządzanie taką listą wyliczonych katalogów do archiwizacji, listą czyszczenia i listą katalogów wykluczonych — jest niewygodne i podatne na błędy. Chciałbym móc, przeglądając w menedżerze plików katalogi, widzieć, które mają być archiwizowane, a które nie, oraz gdzie wykonuje się czyszczenie katalogów.

Dowiązania symboliczne mogą być odpowiedzią - pytanie jak ogarniesz ich aktualizację ze stanem rzeczywistym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1