Re: tip für shellskript Dateiname und Dateisuffix trennen
On Wed, 12 Feb 2003 13:48:34 +0100
Hans Gerber <gerber@niekom.de> wrote:
> Hallo,
>
> in einem shellskript möchte ich gerne x Kopien einer Datei anlegen.
>
> dabei sollen die Dateinamen der neu erzeugten Dateien wie folgt
> aufgebaut sein:
>
> Dateiname + laufendeNummer + suffix
>
> Das kann doch eigentlich nicht so schwer sein, aber ich kriege es
> trotz langer Suche nicht hin. Vielleicht habt Ihr ja noch einen Tip,
> bevorzugt ohne komplexe sed Konstrukte ;) Mit ${fname%.*} kann ich
> jetzt zwar das suffix rausschmeissen, aber wie kriege ich hinterher
> wieder ds richtige suffix dran?
> danke,
> Hans
>
> ++snipp+++
>
> #! /bin/bash
> #
> # Very simpleminded "multiplecopy" utility (based on "???").
> #
> # The "ren" utility, by Vladimir Lanin (lanin@csd2.nyu.edu),
> #+ does a much better job of this.
>
>
> ARGS=2
> E_BADARGS=65
> # check for syntax of calling commando
> if [ $# -ne "$ARGS" ]
> then
> echo "Benutzung: `basename $0` Anzahl Datei"
> # As in "rn gif jpg", which renames all gif files in working
> directory to jpg.
> exit $E_BADARGS
> fi
>
> #check if file exists
> if [ -f "$2" ]
> then
> for ((a=1;a<=$1;a++)) #loop for 'a' times
> do
> fname=`basename $2` # Strip off path.
> n=`echo $fname | sed -e "s/$1/$2/"` # Substitute new for
> old in filename.
> fnamebase=${fname%.*}
> fnamenew=$fnamebase+$a
> # cp $fname $fname.$a # copy file
> echo "N: $n fname: $fname a: $a pn: $pn"
> done
> fi
> echo "$a Dateien kopiert."
> exit 0
Hi Hans,
Beispiel
dat=/home/ich/datei.tar.gz
echo ${dat##*/}
datei.tar.gz
echo ${dat#*.}
tar.gz
echo ${dat##*.}
gz
echo ${dat%/*}
/home/ich/datei
echo ${dat%.*}
/home/ich/datei.tar
Die jeweilige Ausgabe in eine Variable geschrieben und anschließend nach
Deinen Erfordernissen erneut zusammenbauen.
Gruß CHristian
Reply to: