Nowe posty

Autor Wątek: skrypt kopiujący katalogi  (Przeczytany 8635 razy)

emaniek

  • Gość
skrypt kopiujący katalogi
« dnia: 2010-02-02, 01:00:46 »
witam,

jestem niemal laikiem w temacie, potrzebuje skrypt (aby cron go wykonywał). Ma sluzyc do kopiowania katalogu z zawartoscia w inne miejsce, jednoczesnie dopisujac date i czas. Dotego momentu potrafie :), dalej nie. Mianowicie dalej ma byc tak, ze usuwa najstarsze kopie, np jesli ustawimy 100 kopii, to tyle nam ostatnich kopii zostawi, a starsze bedzie automatycznie usuwal.

dziekuje za pomoc

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
skrypt kopiujący katalogi
« Odpowiedź #1 dnia: 2010-02-02, 10:43:25 »
Najprościej wylistować pojedynczo katalogi kopii posortowane wg czasu, odliczyć 100, a pozostałe usunąć:

KOPIE="/katalog/z/kopiami/"
k=0
while read kopia; do
  ((k++))
  if [ $k -gt 100 ]; then
    rm -rf "${KOPIE}/${kopia}"
  fi
done < <( ls -1 -t "$KOPIE" )
Nie testowałem, ale powinno działać ;)

emaniek

  • Gość
skrypt kopiujący katalogi
« Odpowiedź #2 dnia: 2010-02-02, 22:30:55 »
ok, dziekuje, dziala, tylko usuwa najświeższy folder, a ja wolałbym aby usuwał najstarszy, folder ma datę na kocu nazwy w formacie rok-miesiac-dzien-godzina-minuta-sekunda
bylbym wdzieczny jakbys zmodyfikował skrypcik, bo ja w tym temacie zielony jak suseł:)
z góry dziekuje

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
skrypt kopiujący katalogi
« Odpowiedź #3 dnia: 2010-02-02, 23:04:36 »
Dziwne... ls -t powinno sortować najpierw najnowsze.
man ls:
"-t, --sort=time
Sortuje zawartość katalogów według czasu modyfikacji (mtime i-węzła), zamiast sortowania alfabetycznego. Najnowsze pliki są pierwsze."

Co zwraca ci
ls -l -t
oraz
ls -l -tr
wykonane w tym katalogu (ew. w innym, byle by były tam jakieś pliki lub katalogi)?


jeśli wolisz usuwanie po nazwie, a nie dacie utworzenia, to można i tak.
Najprościej by było, gdyby nazwa katalogu była zawsze taka sama, a zmieniał się jedynie człon "rok-miesiac-dzien-godzina-minuta-sekunda". Do tego jeśli masz dopełnianie liczb zerami z przodu, to wystarczy zwykłe sortowanie).
Wtedy po prostu usuń z powyższego skryptu parametr -t.

Jeśli nazwa nie da się łatwo sortować, to trzeba by napisać nieco dłuższy skrypt.

emaniek

  • Gość
skrypt kopiujący katalogi
« Odpowiedź #4 dnia: 2010-02-03, 13:16:45 »
ls-l-t
zwraca posortowane katalogi - od najstarszego do najmłodszego,

ls -l - tr
zwraca posortowane katalogi od najmłodszego do najstarszego

emaniek

  • Gość
skrypt kopiujący katalogi
« Odpowiedź #5 dnia: 2010-02-03, 13:39:06 »
troszke zmodyfikowałem Twój kod tzn:
Cytuj
 KOPIE="/katalog/z/kopiami/"
k=0
while read kopia; do
  ((k++))
  if [ $k -gt 100 ]; then
    rm -rf "${KOPIE}/${kopia}"
  fi
done < <( ls -1 -tr "$KOPIE" )
czyli to "r" dodałem za t w ostatnim wierszu i ....

wszystko gra.

Śliczne dzieki raz jeszcze, gdyż bez Twojej pomocy byłyby nici:)

emaniek

  • Gość
skrypt kopiujący katalogi
« Odpowiedź #6 dnia: 2010-02-03, 13:40:37 »
o teraz ladniej, moze komuś się przyda:

KOPIE="/katalog/z/kopiami/"
k=0
while read kopia; do
  ((k++))
  if [ $k -gt 100 ]; then
    rm -rf "${KOPIE}/${kopia}"
  fi
done < <( ls -1 -tr "$KOPIE" )