Strona 1 z 1

bash skrypt z wykorzystaniem pętli for

: 26 mar 2009, 15:14
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......

Odp: bash skrypt z wykorzystaniem pętli for

: 26 mar 2009, 16:22
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

Odp: bash skrypt z wykorzystaniem pętli for

: 26 mar 2009, 16:29
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

Odp: bash skrypt z wykorzystaniem pętli for

: 26 mar 2009, 16:35
autor: Jacob
Faktycznie, przekombinowałem, ale grunt, że działa ;)

Pozdrawiam

Odp: bash skrypt z wykorzystaniem pętli for

: 26 mar 2009, 18:00
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.

Odp: bash skrypt z wykorzystaniem pętli for

: 26 mar 2009, 19:40
autor: kaszpirowski
dzięki.... jeszcze jedno szybkie pytanie ... jakie polecenie będzie dodawało linię w pliku tekstowym zamiast nadpisywać istniejące dane...?

Odp: bash skrypt z wykorzystaniem pętli for

: 26 mar 2009, 19:57
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.