bin gerade dabei mich in Linux und Bash bzw. Shell Scripting einzuarbeiten. Mit anderen Worten: ein Shell Script-Anfänger.
Ich soll ein Script schreiben, welches mit Hilfe von Übergabeparametern ein Verzeichnis auf Dateien durchsucht. Sofern im selben Verzeichnis eine Datei mit dem selben Dateinamen, aber mit anderer Dateiendung vorhanden ist, sollen die zutreffenden Dateien kopiert werden.
Konkret sieht der Scriptaufruf so aus:
./script.sh <quellverzeichnis> <zielverzeichnis> <dateiendung1> <dateiendung2>
also z.B. ./script.sh /home/test/ /home/test/archiv/ md5 tgz
Beispieldateien im Verzeichnis /home/test/:
20090220_132010_blabla.tgz
20090220_132010_blabla.md5
20090221_151050_dumdidum.tgz
20000221_151050_dumdidum.md5
(Sofern zu einer .tgz-Datei eine zugehörige .md5-Datei existiert, sollen sowohl tgz und md5 kopiert werden)
Mein bisheriger Ansatz wie folgt:
Code: Select all
#!/bin/bash
inputDir=$1
outputDir=$2
fileExt1=$3
fileExt2=$4
var1=( `find $inputDir -name "*.$fileExt1" | sed "s/.$fileExt1//g;s/$inputDir//g"` ) # sed benutzen, um bei der Datei-Trefferliste jeweils die Dateiendung und den Pfad zu entfernen, um den Dateinamen in var1 mit var2 vergleichen zu können.
var1Num=${#var1[*]}
var2=( `find $inputDir -name "*.$fileExt1" | sed "s/.$fileExt1//g;s/$inputDir//g"` )
var2Num=${#var2[*]}
# Zählvariablen deklarieren
var1Counter=0
var2Counter=0
copyCounter=0
# Sammeln der Dateiennamen, zu denen sowohl eine .tgz- als auch .md5-Datei vorhanden ist
for ((var1Counter=0;$var1Counter<$var1Num;var1Counter++))
do
for ((var2Counter=0;$var2Counter<$var2Num;var2Counter++))
do
var1=${var1[var1Counter]}
var2=${var2[var2Counter]}
if [ "$var1" = "$var2" ]
then
copyList[copyCounter]=${var1[var1Counter]}
((copyCounter++))
fi
done
done
let copyCounter=$copyCounter-1
for ((i=0;i<$copyCounter;i++))
do
echo copyList: ${copyList[$i]}
cp -p ${copyList[$i]}.$fileExt1 $inputDir $outputDir
cp -p ${copyList[$i]}.$fileExt2 $inputDir $outputDir
done
Code: Select all
var1=( `find $inputDir -name "*.$fileExt1" | sed "s/.$fileExt1//g;s/$inputDir//g"` )
Hier bin ich irgendwie in einer Sackgasse gelandet...
Wie könnte ich dies bewerkstelligen? Oder anders gefragt: gibt es noch eine besser/einfachere Möglichkeit den Dateinamenvergleich usw. zu bewerkstelligen?
Sry für den langen Text, aber ich wollte die Situation möglichst genau schildern