bash skrypt z wykorzystaniem pętli for

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
kaszpirowski
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 05 lut 2009, 09:49
Płeć: Kobieta
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME

bash skrypt z wykorzystaniem pętli for

Post autor: kaszpirowski »

mam problem z napisaniem wydaje się prostego skryptu:

mam plik tekstowy w którym mam listę plików które chcę skopiować...
jak napisać taki skrypt... prawdopodobnie trzeba będzie wykorzystać pętlą for......
Jacob
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 06 lut 2007, 08:23
Płeć: Mężczyzna
Wersja Ubuntu: 6.10
Środowisko graficzne: LXDE
Architektura: x86

Odp: bash skrypt z wykorzystaniem pętli for

Post autor: Jacob »

1) Skopiowanie wszystkich plików z bieżącego katalogu

Kod: Zaznacz cały

for i in *
do
cp $i /home/jacob/tmp
done
2) Skopiowanie plików, gdzie informacje o ścieżce są podane w pliku tekstowym

Kod: Zaznacz cały

liczba=`cat plik.txt | wc -l`
for i in `seq $liczba`
do
nazwa=`head -$i plik.txt | tail -1`
cp $nazwa /home/jacob/tmp
done
Pozdrawiam
Hagal
Sędziwy Jeż
Sędziwy Jeż
Posty: 41
Rejestracja: 11 sty 2009, 01:35
Płeć: Mężczyzna
Środowisko graficzne: Brak

Odp: bash skrypt z wykorzystaniem pętli for

Post autor: Hagal »

Jacob pisze:

Kod: Zaznacz cały

liczba=`cat plik.txt | wc -l`
for i in `seq $liczba`
do
nazwa=`head -$i plik.txt | tail -1`
cp $nazwa /home/jacob/tmp
done
Troszkę przekombinowałeś :)

Lepiej

Kod: Zaznacz cały

while read plik; do
	cp "$plik" /katalog/docelowy/
done < plik.txt
Pozdrawiam
Nie toleruję zmuszania do reklam...
Jacob
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 06 lut 2007, 08:23
Płeć: Mężczyzna
Wersja Ubuntu: 6.10
Środowisko graficzne: LXDE
Architektura: x86

Odp: bash skrypt z wykorzystaniem pętli for

Post autor: Jacob »

Faktycznie, przekombinowałem, ale grunt, że działa ;)

Pozdrawiam
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: bash skrypt z wykorzystaniem pętli for

Post autor: хur »

a muszą być pętle ?

może dało by się tak:

Kod: Zaznacz cały

cp -t katalog_docelowy $(<plik_z_listą_plików)
albo

Kod: Zaznacz cały

cat plik_z_listą_plików | xargs cp -t katalog_docelowy
pierwsze rozwiązanie ma tę wadę że wielkość pliku nie
może być większa niż rozmiar tego co normalnie można
przekazać przez parametry (afaik 32KiB, jak źle pamiętam
to proszę mnie poprawić).
Drugie powyższej wady nie posiada, bo xargs dba o to
żeby cp dostało tyle ile da radę na raz przyjąć.

EDIT:
zapomniałem o jednej sprawie która dotyczy zarówno
readline (LF) jak i xargsa (LF & spacja),
tzn. OP nie napisał co jest delimiterem
(w xargs od tego jest opcja -d, ew. --null).
Jeśli nazwy plików zawierają białe znaki to mój przykład
z xargsem trzeba przerobić, tzn. użyć -d cośtam lub --null
w zależności od potrzeb.
kaszpirowski
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 05 lut 2009, 09:49
Płeć: Kobieta
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME

Odp: bash skrypt z wykorzystaniem pętli for

Post autor: kaszpirowski »

dzięki.... jeszcze jedno szybkie pytanie ... jakie polecenie będzie dodawało linię w pliku tekstowym zamiast nadpisywać istniejące dane...?
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: bash skrypt z wykorzystaniem pętli for

Post autor: хur »

w sumie to piszesz "polecenie" ale tak sobie
myślę że możesz mieć na myśli operator,
tzn.

echo 'foo' > plik

usunie dotychczasową zawartość, po takim wywołaniu
plik będzie zawierał linię z 'foo' i tyle.

echo 'foo' >> plik

dopisze linię 'foo' do pliku.

Jeśli chodzi o polecenia do nieinteraktywnej edycji
używa się głównie seda i awka.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości