Nowe posty

Autor Wątek: Usuwanie plików nie wymienionych w plikach + pobieranie brakujących  (Przeczytany 3332 razy)

GwynBleidD

  • Gość
Witam!

Mam następujący problem: Posiadam kilkanaście serwerów Counter-Strike i hosting forum. Na hostingu forum mam katalog na tak zwany Fast Download (gdy ktoś nie ma mapy, to ściąga ją z tego folderu zamiast z serwera Gry, żeby nie tworzyć lagów innym graczom. Miejsca na hostingu forum mam 10 GB, co jak na tą ilość serwerów jest mało (mapy do bardziej nietypowych modów zajmują nawet 1GB). Pliki lepiej mi trzymać w jednym katalogu dla wszystkich serwerów, gdyż duża ich część się powtarza - oszczędność miejsca. Pliki na serwerach Counter-Strike co jakiś czas się zmieniają (graczom nudzą się mapy, więc są zmieniane co jakiś czas). Przez trzymanie wszystkiego w jednym katalogu mam problemy z utrzymaniem porządku, nie wiem które pliki są używane a które nie.

I tu potrzebny mi jest skrypt, który wczytywałby zawartość plików tekstowych (po jednym na serwer) w których byłaby lista plików które ten serwer używa. Następnie usuwałby wszystkie pliki, których nie używa żaden serwer, oraz ściągał z FTP serwerów pliki, których brakuje.

udało mi się stworzyć jedynie coś takiego:
#!/bin/bash

PLIKI=( $(cat aim.txt) )
PLIKI=( ${PLIKI[@]} $(cat fun.txt) )

cstrike=( $(find cstrike -type f) )

for file in ${cstrike[@]}
do
        for i in ${PLIKI[@]}
        do
                if [[ $i == $file ]]; then
                        file=
                fi
        done
done
I na tym stanąłem. Nie wiem jak usunąć z tablicy cstrike elementy, które się znajdują w tablicy PLIKI. Z pobieraniem przez FTP i usuwaniem niepotrzebnych plików powinienem sobie poradzić, ale na to nie znalazłem sposobu.

Czy mógłby mi ktoś pomóc?

arctgx

  • Gość
Usuwanie plików nie wymienionych w plikach + pobieranie brakujących
« Odpowiedź #1 dnia: 2011-02-14, 00:34:35 »
Cytat: GwynBleidD
Nie wiem jak usunąć z tablicy cstrike elementy, które się znajdują w tablicy PLIKI.
...czyli zwrócić tylko nazwy plików nie należące do sumy linii z aim.txt i fun.txt, a zatem nie należące do żadnego z tych plików.

Zamiast w czystym bashu proponuję
find "$KAT" -exec grep -qxv {} "$PLIKI1" \\; -exec grep -qxv {} "$PLIKI2" \\; -print
gdzie KAT=cstrike, PLIKI{1,2} to wyżej wymienione.

Żeby nie mnożyć opcji -exec (gdyby było więcej niż dwie), możesz złożyć wcześniej listy plików w jeden plik lub potok.

Jak widzisz przy okazji, ani słowa tu o korzystaniu z tablic. Na upartego, do usuwania elementów tablicy masz wewnętrzne polecenie unset.

Wesprzyj się podręcznikiem basha (man bash lub np. http://www.gnu.org/software/bash/manual/).