[+] Perl - rekurencyjne przeszukiwanie katalogów

Potrzebujesz pomocy z C, C++, perl, python, itp.
blady
Posty: 32
Rejestracja: 29 kwietnia 2007, 21:23

[+] Perl - rekurencyjne przeszukiwanie katalogów

Post autor: blady »

Witam.

Muszę napisać program który usunie mi w drzewie katalogów pliki starsze niż 2 miesiące, ale w każdym katalogu zostawi ostatni plik mimo że jest starszy niż 2 miesiące, tak żeby w każdym katalogu został chociaż jeden plik z najnowszą datą. Mam program już prawie gotowy nie mogę tylko znaleźć sposobu jak znaleźć pliki w drzewie, które ma podkatalogi. Czy ktoś ma jakiś pomysł?
Awatar użytkownika
grucha
Beginner
Posty: 345
Rejestracja: 29 września 2007, 01:04
Lokalizacja: Rzeszów / Kraków

Post autor: grucha »

Pewnie dałoby się dobrać do listy takich plików findem, ma sporo opcji. Trzeba by manual przeczytać, a listę w jakąś tabelę wrzucić.
Bez użycia narzędzi systemowych, chyba ciekawsze rozwiązanie - zwykłe rekurencyjne przeszukiwanie katalogu. Perla nie znam więc opiszę tylko algorytm. Potrzebujemy na starcie tablicę/listę odwiedzonych katalogów. Począwszy od startowego katalogu:

1. Sprawdzamy czy są podkatalogi których nie odwiedziliśmy, jak nie ma to (3) jak są to (2)
2. Są podkatalogi, więc wchodzimy w pierwszy nie odwiedzony i wracamy do (1).
3. Sprawdzamy warunki dla plików i kasujemy te które je spełniają, przechodzimy do (4) chyba, że obecny katalog jest startowym, to kończymy.
4. Wychodzimy z katalogu, w górę, przedtem zapisujemy go do tablicy/listy odwiedzonych, przechodzimy do (1).

Mam nadzieję, że się w tym nie rąbnąłem gdzieś. Rekurencję można by zastąpić wielowątkowością - dla każdego katalogu nowy wątek, który tworzy następne jak natrafi na podkatalogi, a potem kasuje pliki zgodne z wzorcem.
blady
Posty: 32
Rejestracja: 29 kwietnia 2007, 21:23

Post autor: blady »

Dziękuję za pomoc, siedziałem wczoraj nad tym dosyć długo i znalazłem jakieś rozwiązanie wydaje mi się optymalne. Nie znalazłem sposobu żeby wykonać to poprzez wyszukiwanie plików więc doszedłem do wniosku, że trzeba zacząć od wyszukiwania katalogów rekurencyjnie i dla każdego katalogu sprawdzić jakie są pliki, ile itp. program działa. Może komuś przyda się takie rozwiązanie.
rorio
Posty: 45
Rejestracja: 21 marca 2010, 21:01

Post autor: rorio »

Na przyszłość polecam

Kod: Zaznacz cały

File::Find::Rule
ODPOWIEDZ