Nowe posty

Autor Wątek: skrypt do usuwania plików większych niż 1 MB  (Przeczytany 8197 razy)

douglasmclloyd

  • Gość
skrypt do usuwania plików większych niż 1 MB
« dnia: 2007-10-16, 03:09:28 »
Potrzebuję skrypt w #!bin/bash, który sprawdza pliki ładowane przez FTP na serwer (tylko do jednego folderu). Jeśli plik przekracza 1 MB jest usuwany. Skrypt musi chodzić na okrągło. Za pomoc z góry dziękuję.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
skrypt do usuwania plików większych niż 1 MB
« Odpowiedź #1 dnia: 2007-10-16, 11:40:36 »
Mam nadzieję, że to nie praca domowa :)

#!/bin/bash
cd /wybrany/katalog
while [ true ]; do
  for plik in `ls -1`; do
    # czy jest to zwykly plik?
    if [ -f "$plik" ]; then
      # sprawdzamy rozmiar
      if [ `stat --format=%s "$plik"` -gt `expr 1 * 1024 * 1024` ]; then
        rm "$plik"
      fi
    fi
  done
  # zeby nie obciazac CPU, czekamy 0.1 sekundy
  usleep 100000
done

Chyba jest ok, ale nie testowałem.

Bardziej porządnym rozwiązaniem byłby limit uploadu w samym serwerze FTP. Na przykład ProFTPD daje taką możliwość:

  MaxStoreFileSize 1 Mb

Więcej: http://www.proftpd.org/docs/directives/linked/config_ref_MaxStoreFileSize.html


Pozdrawiam.

xavery

  • Gość
skrypt do usuwania plików większych niż 1 MB
« Odpowiedź #2 dnia: 2007-10-16, 12:11:18 »
Cytat: ultr
Mam nadzieję, że to nie praca domowa :)

#!/bin/bash
cd /wybrany/katalog
while [ true ]; do
  for plik in `ls -1`; do
Tak trochę pomarudzę - ktoś kiedyś powiedział, że stosowanie ls w skryptach prawie zawsze jest błędem. I moim zdaniem miał rację:)
A poza tym to rzeczywiście lepiej zastosować możliwości limitowania dawane przez aplikacje niż tworzyć skrypty z pętlą nieskończoną.

chmooreck

  • Gość
skrypt do usuwania plików większych niż 1 MB
« Odpowiedź #3 dnia: 2007-10-16, 13:39:41 »
Cytat: xavery
niż tworzyć skrypty z pętlą nieskończoną.
a przynajmniej zastąpić je cronem... ;-)

douglasmclloyd

  • Gość
skrypt do usuwania plików większych niż 1 MB
« Odpowiedź #4 dnia: 2007-10-17, 04:39:53 »
Dziękuję za odpowiedzi. Problem polega na tym, że pliki ładowane są przez stronę internetową do bazy danych i dopiero później przez FTP na ten sam serwer. Próbowałem w konfiguracji zablokować pliki większe niż 1 MB ale opcja LimitRequestBody 1048576 nie działa i puszcza wszystko. Być może dlatego, że web serwer działa jako proxy. Z usuwaniem większych plików sobie poradziłem ale najlepiej byłoby uniemożliwić ładowanie zbyt dużych. Czy jest w konfiguracji apache jakaś inna opcja ograniczająca rozmiar pliku, jak ta w serwerze FTP?

xis

  • Gość
skrypt do usuwania plików większych niż 1 MB
« Odpowiedź #5 dnia: 2007-10-17, 07:42:03 »
Hmm.. wydaje mi się, że jedno polecenie 'find' z opcją '-exec' załatwi całkowicie kwestię skryptu. Co do filtrowania wgrywanych na serwer plików, możesz - z poziomu strony/portalu/modułu uploadu wprowadzić ograniczenia w jego kodzie tak, by sprawdzał wielkość pliku przed wgraniem go do bazy/repozytorium - robi się to dość łatwo, bo np. php ma możliwość sprawdzenia jakiej wielkości plik nadesłał użytkownik.
Wszystko zależy od tego jaka to strona, w jakim jest języku itd.

douglasmclloyd

  • Gość
skrypt do usuwania plików większych niż 1 MB
« Odpowiedź #6 dnia: 2007-10-17, 22:07:35 »
Moduł upload, którego używam nie ma możliwości kontroli wielkości pliku. Strona nie jest robiona w PHP, Moduł po prostu ładuje wszystko, na co użytkownik ma ochotę. Dopiero po załadowniu mam możliwość stwierdzić jak duży jest plik i go wymazać. Ta kwestia jest już rozwiązana. Niby apache ma opcję ograniczającą rozmiar pliku o której wspomniałem w poprzednim poście. ale u mnie jakoś nie robi. Może trzeba wsadzić ją w odpowiednie miejsce. Jeśli ktoś ma doświadczenie z LimitRequestBody to proszę o wskazówki. A jeśli nie, to trudno. Jeśli ktoś będzie złośliwy to niech ładuje, a system będzie wymazywał.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
skrypt do usuwania plików większych niż 1 MB
« Odpowiedź #7 dnia: 2007-10-18, 12:03:42 »
A co to za moduł? :)