Substring aus Varibale zurückgeben
Geizhals » Forum » Linux-Support » Substring aus Varibale zurückgeben (7 Beiträge, 543 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
Substring aus Varibale zurückgeben
28.12.2014, 12:46:58
Ich geb's zu, ich bin ein Windows-Fuzzi, hab mit Linux nicht wirklich viel zu tun - und schon gar nicht mit Shellscripts. Aber ab und zu braucht man halt was - und dann steht man da...

Zum konkreten Fall: ich hab stümperhaft ein Script gebastelt, das mir mit einer Schleife durch eine Verzeichnisliste mit allen Unterverzeichnissen loopt und darin Dateien mit einer bistimmten Endung auflistet. Das klappt auch soweit.

Mein Problem ist aber, dass ich als Rückgabewert da jetzt den kompletten Pfad zur Datei bekomme (also /root/Verzeichnis/Sub1/Datei), ich aber davon nur das "Datei" brauche.
Im Endeffekt will ich dann die Dateien mit dem Unterverzeichnisnamen als Prefix in ein anderes Verzeichnis verschieben.

Wie bekomme ich jetzt unter Linux ein "Right(Pfad,Len(Pfad)-InStrRev(Pfad,"/"))"?

Hab es schon erfolglos mit cut, expr match und ${##} versucht.

Falls es hilft, das Script:

#! /bin/bash

basedir=/root/Verzeichnis/

for i in `ls $basedir`
do
  echo "Directory: $i"
        for j in `ls $basedir$i/*.ext`
        do
            echo "Full file name: $j"
            fl = <Hier soll nur der Dateiname rauskommen>
            echo "File: $fl"
            echo "New name: /root/NeuesVerzeichnis/${i}_${fl}.ext"
        done
done


Danke schon mal im Voraus.

greetz

glockman B-)

- There's no replacement for displacement. Not even Diesel. -
When the inventor of the USB stick dies they’ll gently lower the coffin, then pull it back up, turn it the other way, then lower it again.
Antworten PM Übersicht Chronologisch
 
Melden nicht möglich
...
Re(3): Substring aus Varibale zurückgeben
29.12.2014, 19:10:34
Sobald dein Script ueber einen Pfadnamen stolpert, der Word Splitting bedingt, bricht es in hundert kleine Scherben, und du wirst das Ergebnis nicht moegen.


for i in `ls *`


ist FALSCH.


for i in *


ist richtig.

Variablen musst du zur Expansion in Double Quotes stecken, denn sonst bricht dein Script auch bei dieser Gelegenheit beim Word Splitting.



Ein Vorschlag - auch wenn ich "dank" der etwas bescheidenen Praesentation des Problems (wie waere es mit "ich habe diese Liste von Files, und will, dass sie nach diesem Muster [ein Bsp.] verschoben werden") nicht ganz sicher bin, ob das dem dir gewuenschten Vorgang gleichkommt:


colo@zealot:~ $ ls -R Verzeichnis/
Verzeichnis/:
dir1  dir2  dir3

Verzeichnis/dir1:
fileA.ext  fileB.ext  fileC.ext  Niete

Verzeichnis/dir2:
fileD.ext  fileE.ext  fileF.ext  Zonk

Verzeichnis/dir3:
fileG.ext  fileH.ext  fileI.ext  Spindelegger



colo@zealot:~ $ ./script.bash 
~/Verzeichnis ~
Full file name: dir1/fileA.ext
File: fileA.ext
New name: /home/colo/NeuesVerzeichnis/dir1_fileA.ext.NEUEEXT

Full file name: dir1/fileB.ext
File: fileB.ext
New name: /home/colo/NeuesVerzeichnis/dir1_fileB.ext.NEUEEXT

Full file name: dir1/fileC.ext
File: fileC.ext
New name: /home/colo/NeuesVerzeichnis/dir1_fileC.ext.NEUEEXT

Full file name: dir2/fileD.ext
File: fileD.ext
New name: /home/colo/NeuesVerzeichnis/dir2_fileD.ext.NEUEEXT

Full file name: dir2/fileE.ext
File: fileE.ext
New name: /home/colo/NeuesVerzeichnis/dir2_fileE.ext.NEUEEXT

Full file name: dir2/fileF.ext
File: fileF.ext
New name: /home/colo/NeuesVerzeichnis/dir2_fileF.ext.NEUEEXT

Full file name: dir3/fileG.ext
File: fileG.ext
New name: /home/colo/NeuesVerzeichnis/dir3_fileG.ext.NEUEEXT

Full file name: dir3/fileH.ext
File: fileH.ext
New name: /home/colo/NeuesVerzeichnis/dir3_fileH.ext.NEUEEXT

Full file name: dir3/fileI.ext
File: fileI.ext
New name: /home/colo/NeuesVerzeichnis/dir3_fileI.ext.NEUEEXT



colo@zealot:~ $ cat ./script.bash 
#/!bin/bash
basedir="${HOME}/Verzeichnis"

pushd "${basedir}"
for i in */*.ext
do
	printf 'Full file name: %s\n' "${i}"
	printf 'File: %s\n' "${i##*/}"
	printf 'New name: %s\n' "${HOME}/NeuesVerzeichnis/${i%%/*}_${i##*/}.NEUEEXT"
	echo
done



echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung