Strona 1 z 1

Bash - skrypt do kopiowania katalogu w inne miejsce

: 08 grudnia 2010, 16:43
autor: trio24
Mam pytanie, jak napisać skrypt, który będzie kopiować katalog z zawartością do nowego katalogu, który będzie w nazwie mieć dzisiejszą datę np 20101208.

: 08 grudnia 2010, 16:56
autor: lun
Ale ten skrypt ma tworzyć ten nowy katalog z datą? Czy ma robić zwykłe cp jednego katalogu do innego (który już jest utworzony i ma człon nazwy identyczny jak nazwa kopiowanego katalogu, tyle tylko że ma jeszcze w tej nazwie datę)?

Szczerze to nie rozumiem po co do tak prostego zdania potrzebny jest skrypt :)

: 08 grudnia 2010, 17:02
autor: trio24
Ten skrypt ma tworzyć katalog z datą.
Jest potrzebny bo katalog źródłowy jest codziennie nadpisywany. Wrzucę sobie go do crona i będę mieć archiwum.

: 08 grudnia 2010, 22:58
autor: lun
W takim razie postaram się odpowiedzieć precyzyjnie na zadane pytanie.
Do napisania tego skryptu będziesz potrzebował:
  1. Trochę czasu.
  2. Zapoznanie się z:

    Kod: Zaznacz cały

    man date
  3. Zapoznanie się z:

    Kod: Zaznacz cały

    man mkdir
  4. Zapoznanie się z:

    Kod: Zaznacz cały

    man cp
Następnie proponuję rozpocząć pisanie skryptu od zadeklarowania interpretera poleceń tekstowych. Zazwyczaj robi się to tak:

Kod: Zaznacz cały

#!/bin/bash
Następnie fajnie by było zadeklarować jakąś zmienną, która będzie przechowywała dla ciebie datę w odpowiednim formacie (do tego przyda się podpunkt b.).
W kolejnym kroku przydałoby się polecenie tworzące odpowiedni katalog, w odpowiednim miejscu (patrz podpunkt c.), z tym że nazwa katalogu docelowego, powinna łączyć się ze zmienną przechowującą datę w odpowiednim formacie.
I na koniec ostatnie, lecz najważniejsze - kopiowanie. Jeśli ścieżki do katalogów mają być sztywne (czyli skrypt ma działać tylko dla katalogów zawartych w jego wnętrzu) wystarczy posłużyć się składnią:

Kod: Zaznacz cały

cp /katalog_źródłowy/* /katalog_docelowy_z_datą
Jeśli skrypt ma być bardziej uniwersalny poczytaj jak przekazać do niego jakieś wartości ($1, $2, $3 itp.). Następnie podmienić nazwy katalogów na nazwy zmiennych i powinno działać. Jeśli we wnętrzu katalogu źródłowego znajduje się coś poza plikami trzeba by też sprawdzić przełączniki kopiowania (tu patrz podpunkt d.).
Ja bym radził właśnie tak napisać ten skrypt.

: 09 grudnia 2010, 08:40
autor: trio24
Dziękuję za sugestie.

Dzisiaj rano napisałem pierwszy skrypt w Linuksie. Dodam, że zadziałał.

Kod: Zaznacz cały

#!/bin/bash

# BACKUP
BACKUP_SOURCE="/home/zapas/"     # katalog zrodlowy
DESTINATION_DIR=$(date +%F)            # nazwa katalogu z dzisiejsza data RRRR-MM-DD

#----------------------------------------------------------------------------------------------

mkdir "/home/admin/user_backups/zapas/${DESTINATION_DIR}"

cp -a "$BACKUP_SOURCE/"* "/home/admin/user_backups/zapas/${DESTINATION_DIR}/" 

: 09 grudnia 2010, 14:16
autor: lun
Gratulacje :)
Nie będę ukrywał że spodziewałem się odpowiedzi w stylu "ale jak to zrobić, weź mi napisz ten skrypt" a tu bardzo miłe zaskoczenie.
Oby tak dalej.

: 09 grudnia 2010, 14:24
autor: trio24
Dzięki za pomoc. Nie do końca rozumiałem te atrybuty dla cp. Więc dałem pierwszy :) .