chomiczek
7.02.2006, 20:53:52
Mam pewnien problem, a mianowicie mam ok 10000 plików w jednym katalogu, jednak tylko 7500 jest mi potrzebnych, tzn. uzywanych czy gdzieś tam wyświetalnych przeze mnie.. musze w jakiś sposób skasować te zbędne pliki..
z bazy mogę wygenerować sobie nazwy plików, ale tylko do tych, które są mi potrzebne.. czyli do tych 7500 w jaki sposób wykasować pozostałe pliki, tzn. te, które nie będą przeze mnie wygenerowane.
Pomysły, które rozważam to np.:
1. Pobranie z bazy nazwy pliku i zmiana nazwy tego pliku np. na OK_nazwapliku, a następnie wykasowanie tych plików, które nie mają na początku OK_.
2. Drugi pomysł (chociaż chyba mało wydajny) miałby polegać na wpisaniu całości nazw plików do jednej tablicy (tych, któe mogę wyciągnąć z bazy), potem wpisanie zawartości katalogu do drugiej tablicy i ich porównanie. Zastanawiam się na porównaniem, a mianowicie.. jeśli nazwa pliku z katalogu nie znalazłaby się w tablicy z nazwami plików z bazy to plik jest kasowany.. problem taki, że takie porównanie musiałoby byc powtórzone 10000 razy!!
Żeby było ciekawiej 10000 zdjęć jest w 3 katalogach, czyli tak naprawę muszę ten skrypt powtórzyć 3 razy dla każdego katalogu oddzielnie (są tam różne pliki)..
Jak myślicie, które rozwiązanie jest lepsze, szybsze, wydajniejsze.. a może jest jakis inny (czyt. łatwiejszy) sposób??
ja bym uzyl sposobu 2. porownywanie wcale nie trwa tak dlugo,
ostatnio porownywalem tablice z 1500 elementami z tablice z 17000 elementow + zaladowanie danych z pliku, czas cos kolo 50 sekudn.
Radarek
7.02.2006, 22:28:55
Gotowca pewnie nikt ci nie podsunie

. Zarys bedzie wygladac tak:
<?php
$pliki_z_bazy = pobierz_z_bazy_tablice_nazw_plikow_ktore_chcesz_zostawic();
$pliki_z_katalogu = pobierz_nazwy_plikow_z_wybranego_katalogu();
foreach ($pliki_z_katalogu as $plik) {
skasuj($plik);
}
}
?>
Dla pewnosci (gdybys sie bal, ze jednak sobie cos skasujesz;)) mozesz te pliki przeniesc do jakiegos innego katalogu.
chomiczek
7.02.2006, 23:02:01
Spoko spoko.. niechodzi tutaj o to jak to będzie wyglądało, bo nie ma problemu, żebym nadpisał.. a co do testów.. zawsze robię backup.. po kilku przykrych doświadczeniach nauczyłem sie
dla pewności porównałbym rozmiar.
chomiczek
8.02.2006, 09:01:29
w tym przypadku nie ma chyba potrzeby porównania rozmiary.. właśnie sprawdzam jak to zadziała.. :/
kszychu
8.02.2006, 10:03:54
A masz miejsce, by skopiowac gdzies te potrzebne pliki? Jeśli tak to robisz pętlę w której odczytujesz z bazy nazwę pliku, kopiujesz go do nowej lokalizacji i tak dla wszystkich rekordów. Na koniec wywalasz stary katalog.
chomiczek
8.02.2006, 23:57:02
Już sobie poradziłem.. wpisałem faktyczną zawartość katalogu do jednej pętli, a to co mogłem wyciągnąć z bazy wpisałem do drugije.. następnie poruwnałem zawartośc obu tablic i skasowałem pliki, które nie powinny się znaleźć w katalogu.. skrypt nie wykonywał sie więcej jak 60 sekund (wyczyszczenie 3 katalogów z 10000 zdjęc każdy). Jeśli ktoś będzie chciał to wrzuce listing.. ogólnie podobny do tego co napisał Radarek
Dzięki serdeczne za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.