BASH - rozdzielanie ci

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
sponsoriada
Beginner
Posty: 149
Rejestracja: 03 października 2010, 22:58
Lokalizacja: Płock

Post autor: sponsoriada »

A czy tak osiągnę pożądany efekt?

Kod: Zaznacz cały

repo="/root/Dokumenty/Skrypty/backup/repo.txt"
exec 6<$repo
while read -u 6 a; do
tar a
done
Czy w ten sposób najpierw pobierze pierwszą ścieżkę z pliku zrobi tara i dopiero powtórzy tą czynność?
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Nie wiem co Ty wykombinowałeś, ale to co Ci podałem robi dokładnie to o co Ci chodzi.
Awatar użytkownika
sponsoriada
Beginner
Posty: 149
Rejestracja: 03 października 2010, 22:58
Lokalizacja: Płock

Post autor: sponsoriada »

Tylko ja do końca nie rozumiem, a raczej nie wiem ja kto przełożyć więc może tak:
Jest plik "repo.txt". W nim znajdują się ścieżki do katalogów, które mają być tarowane.
I teraz czy to miałoby wyglądać tak:

Kod: Zaznacz cały

while read repo.txt line; 
do
tar -cvf  $line /katalog/do/ktorego/..
done < repo.txt
Czy ja źle to rozumiem?

Co daje nam:

Kod: Zaznacz cały

done<repo.txt
Zaczynam dopiero programowanie w bashu więc proszę o cierpliwość i z góry dziękuję za pomoc i cierpliwość!
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post autor: kodama »

Prawie tak - linijka

Kod: Zaznacz cały

tar -cvf  $line /katalog/do/ktorego/..
powinna wyglądać nieco inaczej

Kod: Zaznacz cały

tar -cvf [B]/katalog/do/ktorego/archiwum.tgz[/B] $line
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Kod: Zaznacz cały

while read zmienna;
do
  coś
done<plik
Oznacza "dopóki (while) czytasz (read) z pliku (done<plik) rób coś (do coś)". Plik jest przetwarzany linia po linii. Czytałeś jakiś kurs basha i *przerobiłeś samodzielnie* kilka przykładów?
Awatar użytkownika
sponsoriada
Beginner
Posty: 149
Rejestracja: 03 października 2010, 22:58
Lokalizacja: Płock

Post autor: sponsoriada »

Napotkałem teraz inny problem przy pisaniu skryptu. Potrzebuję znaleźć w wierszu wyrażenie zaczynające się od ":" i kończące "6". Znalazłem polecenie który robi dokładnie odwrotną rzecz.

Kod: Zaznacz cały

 sed -e 's/:.*6//'

Z góry dziękuję.
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post autor: kodama »

To powinno być chyba dobre:

Kod: Zaznacz cały

sed -e 's/.*:\(.*\)6.*/\1/'
Awatar użytkownika
sponsoriada
Beginner
Posty: 149
Rejestracja: 03 października 2010, 22:58
Lokalizacja: Płock

Post autor: sponsoriada »

Super działa!
Mam jeszcze taką prośbę jak możesz rozpisać mi po kolei jak to wyrażenie działa.
Byłbym bardzo wdzięczny.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

Przeczytaj podręcznik systemowy:

Kod: Zaznacz cały

man sed
albo jakikolwiek inny poradnik.
ODPOWIEDZ