Bash - skrypt do kopiowania katalogu w inne miejsce

Potrzebujesz pomocy z C, C++, perl, python, itp.
trio24
Posty: 4
Rejestracja: 07 listopada 2008, 21:43

Bash - skrypt do kopiowania katalogu w inne miejsce

Post 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.
Awatar użytkownika
lun
Beginner
Posty: 266
Rejestracja: 01 lutego 2010, 22:06
Lokalizacja: Warszawa

Post 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 :)
trio24
Posty: 4
Rejestracja: 07 listopada 2008, 21:43

Post 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.
Awatar użytkownika
lun
Beginner
Posty: 266
Rejestracja: 01 lutego 2010, 22:06
Lokalizacja: Warszawa

Post 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.
trio24
Posty: 4
Rejestracja: 07 listopada 2008, 21:43

Post 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}/" 
Awatar użytkownika
lun
Beginner
Posty: 266
Rejestracja: 01 lutego 2010, 22:06
Lokalizacja: Warszawa

Post 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.
trio24
Posty: 4
Rejestracja: 07 listopada 2008, 21:43

Post autor: trio24 »

Dzięki za pomoc. Nie do końca rozumiałem te atrybuty dla cp. Więc dałem pierwszy :) .
ODPOWIEDZ