Wpis z mikrobloga

Już #!$%@? dostaję od tego skryptu do kopii zapasowej. Użytkownik dodaje pliki/katalogi do kopii i zapisują się one w katalogu domowym w plku .backup.lst. Teraz mam problem z samym przesłaniem plików, bo cały czas coś nie działa. W tym sposobie scp odbija palma i udaje, że podany katalog backupu nie istnieje (a istnieje).

readarray backups < ~/.backup.lst
for backup in "${backups[@]}"
do
echo $backup
ssh $address "scp -rp $backup $USER@$address:$path/$now/"
done

W tych dwóch nawet kopiuje, ale tylko pierwszą lokalizację/plik i kończy.

while IFS='' read -r line || [[ -n "$line" ]]; do
echo $line
ssh $address "scp -rp $line $USER@$address:$path/$now/"
done <~/.backup.lst

while read -r line
do
echo $line
ssh $address "scp -rp $line $USER@$address:$path/$now/"
done <~/.backup.lst;

Wywołanie tych z read bez łączenia przez ssh powoduje, że ładnie się wypisują.

Cała część powiązania z połączeniem i kopiowaniem:

echo "Podaj ścieżkę zapisu kopii zapasowej na serwerze:"
read -e path
now=$(date +"%Y-%m-%d-%H-%M-%S")
ssh $address"
cd $path
mkdir $now;
exit;
"
readarray backups < ~/.backup.lst
for backup in "${backups[@]}"
do
echo $backup
ssh $address "scp -rp $backup $USER@$address:$path/$now"
done

Jakieś sugestie?
#bash #linux
  • 18
  • Odpowiedz
@a231: Niby łatwiej, ale nie wiem jak przetworzyć ścieżki z .backup.lst. Przesłanie zmiennej tablicowej przez ssh powoduje, że scp krzyczy iż jest błąd składni (puste zmienne). Przesłanie tego pliku do katalogu kopii (tam gdzie jest katalog $now) i przetwarzanie tego pliku też jest problematyczne i odczyt readem wypluwa puste zmienne.
  • Odpowiedz
@TheArrow: zapisz to jako jakiś normalny skrypt bashowy i odpal przez
bash -x ./skrypt
bo tak to jakieś wróżenie z fusów. Albo pododawaj
echo "ssh..."
w tych linijkach z ssh i debuguj.
  • Odpowiedz
@Sorry_Yanku: Bardzo chętnie, ale to jest skrypt na studia, wykonanie backupu przez scp jest punktowane... Update zrobię przez rsync, bo nic nie było napisane w wymaganiach, że nie można go użyć.
  • Odpowiedz
@TheArrow
Rzuć też jakimś błędem z ssh\scp
Kolejna rzecz:
To: ssh $address "scp -rp $backup $USER@$address:$path/$now/" nie ma sensu
Za jakiegoś serwera 'X' ładujesz się na serwer 'Y' (poprzez zmienną $address)
I potem z Serwera 'Y' używasz scp żeby skopiować plik znów na serwer 'Y' (czyli na ten sam bo $address magicznie się nie zmieni na inny) tylko na innego usera. Dude. Czemu tak?
Pogubiłem się z czego na co chcesz ten
  • Odpowiedz
@mr-nobody: Ta, wyszedł chaos. Mówiąc szczerze poruszam się po omacku i szukam rozwiązań na stacku/ubuntuwiki itd. To jest drugi skrypt, pierwszy to był lajcik - ściągnięcie pogody z serwera i wyświetlenie jej zależnie od tego co sobie użytkownik wybierze (fahrenheity/odświeżanie co 5 minut). Za to tu zrobiły się schody. Skróciłem ten skrypt jak poradziłeś i odpaliłem. Tak to wygląda. Zatrzymał się po stworzeniu katalogu z datą i się zatrzymał. Ręcznie wpisałem
TheArrow - @mr-nobody: Ta, wyszedł chaos. Mówiąc szczerze poruszam się po omacku i sz...

źródło: comment_qpWYSqzy1hCxI2FqR5A0UrgyJgcJco00.jpg

Pobierz
  • Odpowiedz
@TheArrow
Najpierw sprawdź katalog .bakup lub .Backup
Linux rozróżnia wielkość liter

.bakup
.Backup

To są dwa różne katalogi!
Podajesz .Backup, a potem skypt czy coś gdzebie po .backup. Na początek ogarnij czy nazwa katalogu ma być z wielkiej czy z małej litery i podaj tą właściwą.
  • Odpowiedz
@mr-nobody: Aż tak zielony to nie jestem :) Wiem, że to robi różnicę. Sam sobie przetworzył z dużej na małą literę w tej ścieżce ~/Backup. Poza tym teraz bash cyrki odwala i przy każdym połączeniu wyrzuca klucz ecdsa.
  • Odpowiedz
@mr-nobody: W kodzie to jedna linijka, właśnie ta, o której stwierdziłeś, że nie ma sensu:

ssh $address "scp -rp $backup $USER@$address:$path/$now/"
To się mogło tak rozbić na dwie linie, bo dzieliłem ekran pół na pół: terminal-sublimetext

Ja tam nie wiem czy ma sens czy nie, ale taki był przykład
'ssh "scp -rp sciezka/lokalna uzytkownik@adres:sciezka/zdalna"`
Przykłady pokazywały, żeby polecenia przekazywane ssh były w apostrofach, no ale wtedy nie mógłbym działać na zmiennych.
  • Odpowiedz
@mr-nobody: Już zrozumiałem o co Ci chodziło z tym ssh i scp. Przekombinowałem. Został szczegół, o którym zapomniałem wspomnieć. Kopiowanie ma wyglądać tak:
/home/piotr/muzyka/estranged.mp3 -> YYYY-MM-DD-HH-II-SS/home/piotr/muzyka/estranged.mp3
Jak odwzorować strukturę katalogów przy kopiowaniu? Oczywiście używając scp, bo widzę, że rsync potrafi to zrobić przy uruchomieniu z opcją -R.
  • Odpowiedz
@mr-nobody: Od czasu tamtego screena dokonałem zmian i kopia działa.
scp -r kopiuje rekursywnie zawartość katalogów, nie pomoże przy zachowaniu struktury katalogów.
Tak wygląda użycie scp -pr (p zachowuje oryginalne czasy dostępów), drzewko wyżej jest z użyciem rsync -R i jeszcze paroma opcjami.
Chociaż nie wiem czy będę się tak nadymał za wszelką cenę żeby to zrobić przy użyciu scp. Backup -b z użyciem scp jest punktowany na 1 punkt, a
TheArrow - @mr-nobody: Od czasu tamtego screena dokonałem zmian i kopia działa.
scp ...

źródło: comment_yAVV9jlpF1bLN2GNcWU1ZV42Khu6XTlq.jpg

Pobierz
  • Odpowiedz