Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: skrypt kopiujący katalogi  (Przeczytany 8575 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" )