PDA

Visualizza versione completa : Spostare script di "backup" da windows a linux


coguaro
04-08-2013, 13.02.22
come ho gia scritto nella discussione originale che si trova qui (http://forum.wintricks.it/showpost.php?p=1681700&postcount=82) mi è venuto in mente di spostare uno script modificato con l'aiuto del forum da windows ha linux purtroppo per me mi trovo difronte a diversi scogli???
di seguito un aggiornamento sulla situazione

attualmente i test li sto facendo schedulando il primo file che poi richiama gli altri come root in modo da non dover dare password per i comandi che hanno bisogno di quei privilegi

salva.sh




#!/bin/bash -xv

# verifico la presenza delle cartelle per il backup ed eventualmente le creo

cd

cd ..

cd ..

cd media

cd ubuntu

cd data

if [ -d Backup ];

then

cd Backup

echo "La cartella /media/ubuntu/data/Backup esiste già"

else

echo "La cartella /media/ubuntu/data/Backup non esiste e sarà ora creata"

mkdir Backup

cd Backup
fi

if [ -d Log ];

then

cd Log

echo "La cartella /media/ubuntu/data/Backup/Log esiste già"

else

echo "La cartella /media/ubuntu/data/Backup/Log non esiste e sarà ora creata"

mkdir Log

cd Log

fi

cd

mount -t cifs //192.168.1.148/c /mnt/f -o user=guest,pass=,rw,uid=ubuntu
#sudo mount -t cifs //192.168.1.148/c /mnt/f -o user=guest,pass=,rw,uid=ubuntu
#sudo mount -t cifs //7.235.62.114/hd_server /mnt/f -o user=backup,pass=backup,rw,uid=ubuntu



/home/ubuntu/copia.sh | tee "/media/ubuntu/data/Backup/Log/copia `date +%d-%m-%Y` `date +%H.%M.%S`.log"

/home/ubuntu/backup.sh | tee "/media/ubuntu/data/Backup/Log/backup `date +%d-%m-%Y` `date +%H.%M.%S`.log"

chmod -R 777 /media/ubuntu/data

net rpc shutdown -r 10.0.0.1 -Uuser%PASS

shutdown -p now



questo script è quasi perfetto devo solo provare l'effettivo shutdown del server windows (attualmente sto lavorando con una macchina virtuale e non posso spegnere il pc da cui prendo i dati) e capire come mai non mi fa lo shutdown della macchina viruale???



copia.sh




#!/bin/bash -x

# verifico la presenza delle cartelle per il backup ed eventualmente le creo

cd

cd ..

cd ..

cd media

cd ubuntu

cd data

if [ -d Backup ];

then

cd Backup

echo "La cartella /media/ubuntu/data/Backup esiste già"

else

echo "La cartella /media/ubuntu/data/Backup non esiste e sarà ora creata"

mkdir Backup

cd Backup

fi

if [ -d "Non Compressi" ];

then

cd "Non Compressi"

echo "La cartella /media/ubuntu/data/Backup/Non Compressi esiste già"

else

echo "La cartella /media/ubuntu/data/Backup/Non Compressi non esiste e sarà ora creata"

mkdir "Non Compressi"

cd "Non Compressi"

fi

if [ -d Fnet ];

then

cd Fnet

echo "La cartella /media/ubuntu/data/Backup/Non Compressi/Fnet esiste già"

else

echo "La cartella /media/ubuntu/data/Backup/Non Compressi/Fnet non esiste e sarà ora creata"

mkdir Fnet

cd Fnet

fi

cd ..

if [ -d Documenti ];

then

cd Documenti

echo "La cartella /media/ubuntu/data/Backup/Non Compressi/Documenti esiste già"

else

echo "La cartella /media/ubuntu/data/Backup/Non Compressi/Documenti non esiste e sarà ora creata"

mkdir Documenti

cd Documenti

fi

cd

IERI=$(date +%s -d "1 day ago")

EXCLUDE="/home/ubuntu/lista.txt"

MOMENTOTOPICO="`date +%d-%m-%Y` `date +%H.%M.%S`"

DEST="/media/ubuntu/data/Backup/Non Compressi/Documenti/Documenti "$MOMENTOTOPICO

for i in /mnt/f/Documenti/*

do

for x in $EXCLUDE

do

if [ "$x" != "$i" ]; then

DATE=$(date -d$(stat --format=%y "$i" | cut -d\ -f1) +%s) ;

if [ "$DATE" -gt "$IERI" ];

then

[ ! -d "$DEST" ]; mkdir -p "$DEST"

cp -aRv "$i" "$DEST"

((numfiles++))

fi

fi

done

done

echo "file copiati $numfiles"

EXCLUDE="/home/ubuntu/lista.txt"

MOMENTOTOPICO="`date +%d-%m-%Y` `date +%H.%M.%S`"

DEST="/media/ubuntu/data/Backup/Non Compressi/Fnet/Fnet "$MOMENTOTOPICO

for i in /mnt/f/fnet/*

do

for x in $EXCLUDE

do

if [ $x != $i ]; then

[ ! -d "$DEST" ]; mkdir -p "$DEST"

cp -aRv $i "$DEST"

((numfiles++))

fi

done

done

echo "file copiati $numfiles"



in queso script invece ho problemi con i documenti in quanto con windows io facevo con xopy

doff mm-dd-yyyy > tempdata.txt


@echo on


for /F %%x in (tempdata.txt) do xcopy "f:\Documenti\*.*" "d:\Backup\Non Compressi\Documenti\Documenti %data% %time%" /D:%%x /c /v /f /i /s /e /k /r /h /y /z /Exclude:lista.Txt



opzioni xcopy per documenti

/D:%%x /c /v /f /i /s /e /k /r /h /y /z /Exclude:lista.Txt

/D:m-d-y Copia i file modificati dopo la data specificata (inclusa).
Se non è specificata alcuna data, copia solo i file la cui
ora di origine è più recente rispetto all'ora di destinazione.
/EXCLUDE:file1[+file2][+file3]...
Specifica un elenco di file contenenti stringhe. Nei file
le stringhe devono essere riportate su righe distinte.
Se il percorso assoluto di un file da copiare corrisponde
almeno in parte a una delle stringhe presenti in tali file,
il file verrà escluso dalla copia.
Se ad esempio si specifica una stringa quale \obj\ o .obj,
verranno esclusi rispettivamente tutti i file nella directory
obj o tutti i file con estensione obj.
/S Copia directory e sottodirectory, ad eccezione di quelle vuote.
/E Copia directory e sottodirectory, incluse quelle vuote.
Analogo a /S /E. Questa opzione può essere utilizzata per
modificare /T.
/V Verifica le dimensioni di ogni nuovo file.
/C Continua la copia anche in caso di errori.
/I Se la destinazione non esiste e la copia riguarda più file,
verrà presupposto che la destinazione sia una directory.
/F Visualizza i nomi completi dei file di origine e destinazione
durante la copia.
/H Copia anche i file nascosti e di sistema.
/R Sovrascrive i file di sola lettura.
/K Copia gli attributi. Il comando Xcopy senza opzioni reimposta
gli attributi di sola lettura.
/Y Non chiede conferma prima di sovrascrivere un file
di destinazione esistente.
/Z Copia file di rete in modalità riavviabile.



la copia dei soli file modificati nelle ultime 24 ore in tutte le sottocartelle in una nuova cartella ogni giorno come creare la cartella ogni giorno non è stato un grosso problema il problema è la ricerca dei file come con windows visto che cp questa cosa non la fa con lo script attuale la ricerca la fa ma non copia solo i file modificati ma tutta la cartella ed eventuali sottocartelle o file anche se non sono stati mdoficati

in rete ho trovato questa riga di comando per find

find $E ! -type d -mtime -1 -exec cp -r --parents {} $B/$T \;

che dovrebbe servire al caso mio ma non saprei come integrarla nello script attuale??? l'unica cosa che so fare è modificare il $e con /mnt/f/Documenti/* che è la mia cartella di origine dove deve essere fatta la ricerca e penso anche $B/$T con "$DEST" che sarebbe la mia destinazione



backup.sh




#!/bin/bash -x

# verifico la presenza delle cartelle per il backup ed eventualmente le creo

cd

cd ..

cd ..

cd media

cd ubuntu

cd data

if [ -d Backup ];

then

cd Backup

echo "La cartella /media/ubuntu/data/Backup esiste già"

else

echo "La cartella /media/ubuntu/data/Backup non esiste e sarà ora creata"

mkdir Backup

cd Backup

fi

if [ -d Compressi ];

then

cd Compressi

echo "La cartella /media/ubuntu/data/Backup/Compressi esiste già"

else

echo "La cartella /media/ubuntu/data/Backup/Compressi non esiste e sarà ora creata"

mkdir Compressi

cd Compressi

fi

if [ -d Fnet ];

then

cd Fnet

echo "La cartella /media/ubuntu/data/Backup/Compressi/Fnet esiste già"

else

echo "La cartella /media/ubuntu/data/Backup/Compressi/Fnet non esiste e sarà ora creata"

mkdir Fnet

cd Fnet

fi

cd ..

if [ -d Documenti ];

then

cd Documenti

echo "La cartella /media/ubuntu/data/Backup/Compressi/Documenti esiste già"

else

echo "La cartella /media/ubuntu/data/Backup/Compressi/Documenti non esiste e sarà ora creata"

mkdir Documenti

cd Documenti

fi

if [ -d Completo ];

then

cd Completo

echo "La cartella /media/ubuntu/data/Backup/Compressi/Documenti/Completo esiste già"

else

echo "La cartella /media/ubuntu/data/Backup/Compressi/Documenti/Completo non esiste e sarà ora creata"

mkdir Completo

cd Completo

cd ..

fi

if [ -d Incrementale ];

then

cd Incrementale

echo "La cartella /media/ubuntu/data/Backup/Compressi/Documenti/Incrementale esiste già"

else

echo "La cartella /media/ubuntu/data/Backup/Compressi/Documenti/Incrementale non esiste e sarà ora creata"

mkdir Incrementale

cd Incrementale

cd ..

fi

# verifica se il file documenti.7z esiste:

# - se esiste, lo aggiorna nel nuovo file

# - se non esiste, lo crea

cd

cd ..

cd ..

cd media

cd ubuntu

cd data

cd Backup

cd Compressi

cd Documenti

cd Completo

if [ -f documenti.7z ];

then

echo "Il file Documenti.7z esiste ora lo aggiorno"

else

echo "Il file documenti.7z non esiste e sarà ora creato"

set -v

7z a -r -x@"/home/ubuntu/lista.txt" -y -mx=9 "documenti.7z" "/mnt/f/Documenti/*.*"

cp documenti.7z "documenti completo `date +%d-%m-%Y` `date +%H.%M.%S`.7z"

set +v

fi

# Crea il file incrementale documenti con i file modificati dall'ultimo backup

set -v

7z u "documenti.7z" -u- -up0q0r2x0y2z0w2!new.7z -mx=9 "/mnt/f/Documenti/*.*" -r -x@"/home/ubuntu/lista.txt" -y

mv new.7z "/media/ubuntu/data/Backup/Compressi/Documenti/Incrementale/documenti `date +%d-%m-%Y` `date +%H.%M.%S`.7z"

set +v

# Aggiorna i file documenti.7z per poter creare l'incrementale con i soli file modificati nelle ultime 24 ore

set -v

7z u -r -x@"/home/ubuntu/lista.txt" -y "documenti.7z" -mx=9 "/mnt/f/Documenti/*.*"

set +v

cd

cd ..

cd ..

cd media

cd ubuntu

cd data

cd Backup

cd Compressi

cd Fnet

#creo il backup di Fnet

set -v

7z a -r -x@"/home/ubuntu/lista.txt" -y -mx=9 "fnet `date +%d-%m-%Y` `date +%H.%M.%S`.7z" "/mnt/f/fnet/*.*"

set +v



questo script di base non ha problemi per fortuna




lista.txt





thumbs.db


*.DS_Store


desktop.ini


~*.tmp


~*.doc





l'unico altro "problema" che affligge questo script è un problemino con i log con windows mettendo "@echo on" prima della riga di comando e "@echo off" dopo la riga di comando riuscivo ad avere nei log oltre all'output degli script anche la riga di comando come con windows

qualcuno sa aiutarmi???

borgata
04-08-2013, 14.18.02
Esiste un unico consiglio, secondo me: imparare ad usare la bash di linux.
Fermati, prenditi qualche giorno per studiare gli script bash e poi vedrai che riuscirai a fare la conversione in modo abbastanza indolore, anche perchè la bash è decisamente più potente e versatile dello scripting di base su windows.

coguaro
04-08-2013, 16.05.08
Esiste un unico consiglio, secondo me: imparare ad usare la bash di linux.
Fermati, prenditi qualche giorno per studiare gli script bash e poi vedrai che riuscirai a fare la conversione in modo abbastanza indolore, anche perchè la bash è decisamente più potente e versatile dello scripting di base su windows.

grazie per il consiglio ma è già parecchio tempo che ci sto studiando dietro e grazie a ricerche e anche qualche altro piccolo aiuto da altri sono riuscito a gia modificare tutto quello che vedi ( che si può dire essere forse il 90% dello script ) purtroppo per me senza qualche esempio concreto a cui riesco ad appoggiarmi o convertire per qualche test faccio fatica a comprenderne a pieno il funzionamento per esempio con la verifica dei file e delle cartelle non ho avuto problemi ho trovato un esempio in rete e sono riuscito ad adattarlo alle mie funzioni

p.s. un'altro piccolo problema che mi sono dimenticato è il fatto di contare i file all'interno delle cartelle come singoli file e non come cartella mi spiego nella copia del gestionale c'è una sottocartella con dentro 1354 file solo che però con lo script attuale non mi conta 1354 ma mi conta 1 come cartella e non come file?????

borgata
04-08-2013, 18.30.07
Io intendevo un approccio più "scolastico" al bash script.
Spesso cercare in rete esempi e cercare di capirli serve solo a fare confusione, ma se intendi usare linux allora la bash è uno strumento potente e ti conviene esserne padrone.

Se sei interessato ho un po' di materiale, potrei passartelo nel caso.

coguaro
04-08-2013, 20.00.35
Io intendevo un approccio più "scolastico" al bash script.
Spesso cercare in rete esempi e cercare di capirli serve solo a fare confusione, ma se intendi usare linux allora la bash è uno strumento potente e ti conviene esserne padrone.

Se sei interessato ho un po' di materiale, potrei passartelo nel caso.

anche tu hai ragione ma purtroppo per me con manuali o simili mi perdo molto mi raccapezzo di più con esempi che posso tentare di adattare e capire come funzionano questo script vorrei avrelo funzionante al massimo per metà mese non vorrei iniziare i backup da windows che funziona benissimo e poi riformatare la macchina e passare a linux magari tra 2 mesi perchè sono riuscito a capire i vari comandi :wall::wall::wall::wall:

borgata
04-08-2013, 22.46.12
anche tu hai ragione ma purtroppo per me con manuali o simili mi perdo molto mi raccapezzo di più con esempi che posso tentare di adattare e capire come funzionano questo script [...]
Se vuoi fidarti di quanto ti dico, questa è un'illusione.
In quel modo non capirai mai quel che stai facendo e avrai sempre difficoltà. Puoi cavartela per qualcosa di semplice ma alla prima difficoltà sarai punto e accapo.
Può spaventare un po' il dover studiare come si deve un argomento, ma alla fine farai molti meno sforzi e avrai molte meno "incazzature" rispetto a quelle che ti aspettano cercando di destreggiarti con gli esempi.
Del resto il bash scripting che ti serve è abbastanza accessibile senza dover passare mesi studiando a tempo pieno, quindi in questo caso direi che un approccio come si deve alla materia è decisamente il più indicato.

LoryOne
05-08-2013, 15.57.42
Mi associo al consiglio di borgata.
Un batch è più intuitivo di un bash, quindi nella maggior parte dei casi si può fare un copia-incolla dello script di esempio ed adattarlo con poco sforzo.
Un bash è tutt'altra cosa.
Ti propongo di cominciare da qua: http://nixsvr.com/llthw/ex3
Il sito è un must per chiunque muova i primi passi in ambiente Unix ed è articolato in modo passo-passo con "difficoltà" crescente.
Ogni lezione è impostata in tre sezioni:
1 - Digita questi comandi
2 - Cosa dovresti ottenere
3 - Spiegazione di quanto sopra.
Mi sento di poterlo consigliare...Credimi che ci metterai molto meno di quel che pensi ad imparare ed acquisirai cognizione di causa, che, in informatica, è fondamentale per saperci fare sul serio.

LoryOne
06-08-2013, 07.51.03
...una volta entrato nell'ordine di idee, passa qui: http://ss64.com/bash/

coguaro
06-08-2013, 20.27.56
Mi associo al consiglio di borgata.
Un batch è più intuitivo di un bash, quindi nella maggior parte dei casi si può fare un copia-incolla dello script di esempio ed adattarlo con poco sforzo.
Un bash è tutt'altra cosa.
Ti propongo di cominciare da qua: http://nixsvr.com/llthw/ex3
Il sito è un must per chiunque muova i primi passi in ambiente Unix ed è articolato in modo passo-passo con "difficoltà" crescente.
Ogni lezione è impostata in tre sezioni:
1 - Digita questi comandi
2 - Cosa dovresti ottenere
3 - Spiegazione di quanto sopra.
Mi sento di poterlo consigliare...Credimi che ci metterai molto meno di quel che pensi ad imparare ed acquisirai cognizione di causa, che, in informatica, è fondamentale per saperci fare sul serio.

devo dire questo sito è molto bello e ben curato il problema più grosso per me è l'inglese :wall::wall: l'altro sito già lo conoscevo l'ho gia usato per vedere le caratteristiche dei vari comandi se ne esistesse uno simile a tutti e due ma in italiano potrei essere a posto magari riuscirei anche a capire tutto senza problemi!!!!!
comunque grazie per le dritte proverò a dargli un occhio più approfondito :) :D