morsik Napisano Czerwiec 25, 2008 Zgłoszenie Share Napisano Czerwiec 25, 2008 Witam. Postanowiłem trochę się poduczyć i napisać sobie (prawie) prosty skrypt do robienia backupu w bashu. Może najpierw kod, a potem opis problemu #!/bin/bash source /etc/init.d/functions.sh einfo "Backup script" einfo "File to backup: ${1}" ContinueMenu=1 while (( ContinueMenu )) do echo -n "Do you want to continue? [Y/n] " read KeyToContinue if [[ $KeyToContinue = "n" || $KeyToContinue = "N" ]] then ewarn "Cancelled by user" ContinueMenu=0 elif [[ $KeyToContinue = "y" || $KeyToContinue = "Y" || $KeyToContinue = "" ]] then einfo "Backuping selected files" ebegin "Creating temporary directory" CurrentDate=$(date +%d-%m-%Y) TempDir="/tmp/backup/backup-${CurrentDate}" mkdir -p "${TempDir}" # Create temp directory eend "$?" exec 0<"${1}" while read FileToBackup do if [[ ! -e $FileToBackup ]] then ewarn "File '${FileToBackup}' does not exist!" BackupWarnings=1 else ebegin "Copying file '${FileToBackup}' to temporary directory" install "${FileToBackup}" "${TempDir}${FileToBackup}" -D eend "$?" fi done ebegin "Compressing data" cd "${TempDir}" tar cjf "${TempDir}.tar.bz2" * eend "${?}" rm -rf ${TempDir} ContinueMenu=0 else ewarn "You must specify some option:" echo "[Y] Yes - Continues backup process" echo "[N] No - Aborting backup process" ContinueMenu=1 fi done Info: Jak zapewne zauważyliście, w linii numer 3 jest wpis o source, ponieważ skrypt ten korzysta z pewnych estetycznych funkcji Gentoo i robi ładne informacje. W późniejszym okresie przekopiuję potrzebne funkcje i dodam do skryptu, narazie aby odpalić na Fedorze należy wszystkie funkcje ewarn, einfo, eerr oraz ebegin, zamienić na echo, a eend "${1}" usunąć. Powinno zadziałać. Opis problemu: Skrypt pobiera listę plików z pliku wskazanego w argumencie. /etc/httpd/conf.d/httpd.conf /etc/mysql.conf /etc/mplayer/mplayer.conf Jednak nie zadziała przy użyciu maski takiej jak: /etc/* /mnt/Dane/Zdjęcia/dscn????.jpg /mnt/Dane/public/html/* Zupełnie nie wiem jak można to zrobić, bo pisanie każdego pliku z osobna (a lista przecież ciągle się zmienia) jest dość męczące Z góry dzięki za pomoc. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Arabski Napisano Czerwiec 25, 2008 Zgłoszenie Share Napisano Czerwiec 25, 2008 Nie łatwiej by Ci było zamiast tego: install "${FileToBackup}" "${TempDir}${FileToBackup}" -D przekazać bezpośrednio listę plików do tara? tar cjf "${TempDir}.tar.bz2" * Albo jeszcze inaczej - zbudować listę plików w pliku tekstowym (ze ścieżkami bezwzględnymi) i tym go "nakarmić" p.s. Nie zrozum mnie źle, ale strasznie jest zakombinowany ten skrypt... A co z KISS? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morsik Napisano Czerwiec 25, 2008 Autor Zgłoszenie Share Napisano Czerwiec 25, 2008 No właśnie ścieżki bezwzględne działają, ale ja bym chciał po masce lecieć Przekazać bezpośrednio... Nie wiem jakby to miało działać Wiem że trochę nabazgrałem, no ale coś sam zrobiłem w końcu KISS? Hmm... głównie ma być to prosty i działający skrypt do robienia backupu potrzebnych plików, nie całych partycji, tą wersję można uznać za FileBackuper-alpha1 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Czerwiec 25, 2008 Zgłoszenie Share Napisano Czerwiec 25, 2008 Zupełnie nie wiem jak można to zrobić, bo pisanie każdego pliku z osobna (a lista przecież ciągle się zmienia) jest dość męczące Np.find /etc -name "*" > ${FileToBackup} find /mnt/Dane/Zdjęcia -name "dscn????.jpg" >> ${FileToBackup} find /mnt/Dane/public/html -name "*" >> ${FileToBackup} Ale jak wspomniał już Arabski strasznie zakręcony ten skrypt Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Arabski Napisano Czerwiec 25, 2008 Zgłoszenie Share Napisano Czerwiec 25, 2008 Może odpowiem tak: #!/bin/bash time=`date +%j_%y-%H_%M_%S` dir="/root/conf-backup/"$time"-settings_backup" ext=".tar.bz2" name=$dir$ext echo "Creating : "$name tar -c -j -p -P --directory / --files-from=/root/bin/backup_filelist -f $name Pakuje z zachowaniem uprawnień i ze ścieżkami bezwzględnymi z przygotowanej listy plików. A co do KISS - Pierwsze primo: trzymałbym się raczej czystego basha, niż jakiś predefiniowanych funkcji. Większa "przenośność" (fuj, paskudne słowo). Drugie primo: popatrz na Twój i na mój - widzisz różnicę? p.s. Polecam man tar Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morsik Napisano Czerwiec 26, 2008 Autor Zgłoszenie Share Napisano Czerwiec 26, 2008 No mana czytalem ale nie myslalem ze moze miec taka fajna funkcje Glownie chodzilo wlasnie o --files-from. Dziala, musze jeszcze tylko rozwiazac problem nieistniejacych plikow, czyli gdy w pliku z lista wystapi plik ktory nie istnieje Dzieki EDIT$ Niestety ten sposób także nie działa. Dalej muszę podać bezwzględną ścieżkę do każdego z plików. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Arabski Napisano Czerwiec 26, 2008 Zgłoszenie Share Napisano Czerwiec 26, 2008 musze jeszcze tylko rozwiazac problem nieistniejacych plikow, czyli gdy w pliku z lista wystapi plik ktory nie istnieje Faktycznie tar marudzi jak pliku nie ma. Ale skoro chcesz mieć interaktywne dodawanie, to sprawdzanie czy plik istnieje możesz zrobić zanim wsadzisz go na listę. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
bugaz1978 Napisano Czerwiec 26, 2008 Zgłoszenie Share Napisano Czerwiec 26, 2008 Skryptami dawno się nie bawiłem (ostatnio sh na Unix SCO) ale proponuje zamienić pętle while na for for linia in `less test`; do echo $linia; done gdzie test to: /home/tom* /FILES/Programy/* i daje wynik [tomek@localhost ~]$ for linia in `less test`; do echo $linia; done /home/tomek /FILES/Programy/3630Driver(Eng)_0413.zip /FILES/Programy/bcm43xx /FILES/Programy/bios 2.70.zip /FILES/Programy/boot98.exe /FILES/Programy/compiz-fusion-0.6.99.i386 /FILES/Programy/dvdauthor-0.6.14 /FILES/Programy/DVDStyler-1.6.2 Może to troche niezbyt nowoczesne, ale działa na bashu w F8 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morsik Napisano Czerwiec 26, 2008 Autor Zgłoszenie Share Napisano Czerwiec 26, 2008 Jednak dalej to jest problemem, ponieważ zależy mi wpisać poprostu: /etc/* a mieć wynik ze wszystkimi podkatalogami, a Twój przykład nie daje tej możliwości :| Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
bugaz1978 Napisano Czerwiec 26, 2008 Zgłoszenie Share Napisano Czerwiec 26, 2008 Może co powiem teraz to głupota, ale czy to nie jest tylko problem pisowni w pliku zawierającym dane do zbackupowania tj. Jeżeli chcesz zrobić backup /etc to piszesz tylko /etc a nie /etc/* Operacje na katalogach chyba są podobne do tych na plikach przy pisaniu skryptów? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Adi1981 Napisano Czerwiec 26, 2008 Zgłoszenie Share Napisano Czerwiec 26, 2008 Nie piszesz głupot ;)Dokładnie jak napisałeś, też nie rozumiem w czym problem, skoro tar cvjf etc.tar.bz2 /etc doda cały katalog wraz z podkatalogami do archiwum... Nie wiem czemu ma służyć ta maska po /etc Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morsik Napisano Czerwiec 26, 2008 Autor Zgłoszenie Share Napisano Czerwiec 26, 2008 Ehhh... skrypt ma być uniwersalny. Jeden będzie chciał spakować /etc/* a inny /etc/conf.d/* a jeszcze inny /mnt/Dane/Zdjęcia/*.jpg Pewnie powiecie abym spróbował jakiegoś gotowego programu. No z chęcią, tylko podajcie taki program, który mi zarchiwizuje katalogi, a nie całą partycje. Patrzyłem na partimage, ale on właśnie całe partycje tylko umie. O innych nie słyszałem. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Czerwiec 26, 2008 Zgłoszenie Share Napisano Czerwiec 26, 2008 (...) tylko podajcie taki program, który mi zarchiwizuje katalogi, a nie całą partycje. morsik, o co Tobie własciwie chodzi? Przecież tar jest właśnie takim programem. Podając odpowiednie opcje możesz zbackupować zawartość katalogu /etc bez podkatalogów albo jeśli chcesz rekursywnie z podkatalogami, możesz sobie zbackupować /etc/conf.d osobno itd itd. tar kopiuje katalogi a nie partycje, aktualna listę plików mozna budować tak jak pokazalem wyżej bezpośrednio przed rozpoczęciem kopii. Nie rozumiem dlaczego upierasz się przy wzorcu /etc/* jeśli można w skrypcie budować plik tymczasowy z aktualną listą plików, wykonać tar i usunąć plik, żeby czysto było? Jakoś się pogubiłem i nie wiem czego tak naprawdę potrzebujesz... :lammer: Chyba, że zależy Ci na znalezieniu rowziązania jako takiego niezależnie od jego efektywności, czyli po prostu "sztuka dla sztuki" Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morsik Napisano Czerwiec 27, 2008 Autor Zgłoszenie Share Napisano Czerwiec 27, 2008 No trochę mnie wena twórcza rozpiera A tak na serio. Chodzi o to, że mogę i dać to /etc jak mówisz, ale chodzi o to, że w jednym pliku konfiguracyjnym, mogę podać kilka ścieżek do różnych plików. Chce mieć jedno archiwum, prostym kosztem jednego pliku. Zautomatyzowane Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Adi1981 Napisano Czerwiec 27, 2008 Zgłoszenie Share Napisano Czerwiec 27, 2008 Dalej nie rozumiem co to wszystko szkodzi żeby mieć w tym jednym pliku konfiguracyjnym np: /etc /home /mnt/zdjecia /media/dokumenty /var/spool/mail /home/user/dupamaryny.pdf itd... ? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się