Script mit while Schleife kontrolliert per Tastendruck abbrechen

25/05/2010 - 22:58 von Karl Teuschler | Report spam
Hallo,

Ich möchte gerne nach jeder Zeile einer TextDatei, in einem
Verzeichnis Baum suchen, und wenn das Verzeichnis vorhanden ist,
möchte ich dieses in ein anderes Verzeichnis kopieren.

Nun hat diese TextDatei hat ca. 1000 Zeilen.

In Jedes dieser zu kopierenden Verzeichnisse ist ca. 300-500MB groß.
Ich arbeite die TextDatei mit einer Schleife ab.

Wie kann ich per Tastendruck so abbrechen, dass ein Schleifendurchgang
fertig durchlaufen wird.

Bzw. wàre noch schön beim nàchsten aufruf des Scriptes an der
abgebrochenen Stelle der TextDatei weiter zu machen.

Mein Testumgebung:

Ich habe eine Liste mit Verzeichnissen, diese beinhaltet.
karl@teuschler:~$ cat tmp/dir.txt
dir1
dir2
dir3

Dann habe ich folgende Verzeichnisse unter tmp/.

karl@teuschler:~$ ls -l tmp/
insgesamt 16
drwxr-xr-x 2 karl karl 4096 2010-05-25 22:00 dir1
drwxr-xr-x 2 karl karl 4096 2010-05-25 22:01 dir2
drwxr-xr-x 2 karl karl 4096 2010-05-25 22:01 dir3

Als Ziel-Verzeichnis dient.

karl@teuschler:~$ ls -l dest_dir/
insgesamt 0


Mein Script sieht so aus:
#

#!/bin/bash
clear
compare_dir(){
find "${2}" -mindepth 1 -iname "*${1}*" -type d | while read
directory; do
cp -r "${directory}" "${3}/" && echo "${directory}"
done
}

read_list(){
while read -r "line"
do
compare_dir "${line}" "${HOME}/tmp/" "${HOME}/dest_dir"
done < "${1}"
}
read_list "${HOME}/tmp/dir.txt"
#

Danke für die Hilfe
Karl
 

Lesen sie die antworten

#1 Hauke Laging
26/05/2010 - 04:08 | Warnen spam
Karl Teuschler wrote:

Wie kann ich per Tastendruck so abbrechen, dass ein Schleifendurchgang
fertig durchlaufen wird.



Entgegen meiner fröhlichen Erwartung habe ich das nicht hingekriegt, sondern
festgestellt, dass ich offenbar keine große Ahnung davon habe, wie eine
Konsole mit Eingaben und wie die Shell mit Signalen umgeht... aber immerhin
kann ich an anderer Stelle dienen:


Bzw. wàre noch schön beim nàchsten aufruf des Scriptes an der
abgebrochenen Stelle der TextDatei weiter zu machen.



Dafür muss sich das Script ja nur merken, was es schon abgearbeitet hat und
diese Eintràge beim Start überspringen.


Mein Script sieht so aus:



#

#!/bin/bash
clear



done_list_file=fertig.txt
if [ -f "$done_list_file" ]
then
lines_done=$(wc -l < "$done_list_file")
else
lines_done=0
fi



compare_dir(){
find "${2}" -mindepth 1 -iname "*${1}*" -type d | while read
directory; do
cp -r "${directory}" "${3}/" && echo "${directory}"
done
}

read_list(){



i=0

while read -r "line"
do



if [ "$i" -lt "$lines_done" ]
then
((i++))
continue
else
if [ "$i" -gt 0 ]
then
echo "Die ersten ${i} Zeilen übersprungen"
fi
fi

compare_dir "${line}" "${HOME}/tmp/" "${HOME}/dest_dir"



echo "${line}" >> "$done_list_file"

done < "${1}"
}
read_list "${HOME}/tmp/dir.txt"



#




Natürlich musst Du die Datei, in der die abgearbeiteten Zeilen stehen, dabei
im Auge behalten.


CU

Hauke
http://www.hauke-laging.de/ideen/
D44C 6A5B 71B0 427C CED3 025C BD7D 6D27 ECCB 5814

Ähnliche fragen