sonderzeichen in scripten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
alexatdebian
Beiträge: 117
Registriert: 19.07.2004 18:17:42

sonderzeichen in scripten

Beitrag von alexatdebian » 22.02.2007 15:10:33

Hallo,
für ein script benötige ich etwas ähnliches wie:


#!/bin/sh
ldirs=`find -maxdepth 1 -type d`
echo $ldirs

for k in $ldirs
do

echo $k
done


wobei ldirs=. ./fdir1 ./edir withspace ./dir1

ich verwende find, da ich die ./ brauche.
das for listet natürlich ./edir und withspace getrennt.
(ich nenn meine dirs nicht so, aber die nutzer, deren verzeichnisse ich backupen will).

ich brech mir die ganze zeit schon einen ab um das zu fixen. meine ideee:
ldirs string nach . zerhacken und in array schreiben. dann über die array strings mit sed gehen, und alle sonderzeichen mit \ maskieren. das ganze natürlich mit standard tools.

hat da jemand schon was fertiges?

danke!

alex

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 22.02.2007 21:39:35

alexatdebian hat geschrieben: hat da jemand schon was fertiges?
ja, aber leider ohne einen String nach "." zu zerhacken und in ein array zu schreiben, das kommt mir nämlich viel zu kompliziert vor und würde auch Probleme bei einem Directory "./xxx.yyy" machen :wink:

Code: Alles auswählen

root@gms1:~/tmp# mkdir "a b c"
root@gms1:~/tmp# mkdir "xxx.yyy"
root@gms1:~/tmp# find -maxdepth 1 -type d | while read dir; do echo "dir='$dir'"; done
dir='.'
dir='./a b c'
dir='./xxx.yyy'
Gruß
gms

yeti

Beitrag von yeti » 22.02.2007 22:56:36

...es gäbe da auch noch die find-Optionen -print0 und -fprint0 und xargs kann auch auf nullterminierten Listen agieren...

alexatdebian
Beiträge: 117
Registriert: 19.07.2004 18:17:42

Beitrag von alexatdebian » 23.02.2007 14:06:13

hallo,

danke für die tips. (ich hätte natürlich nach ./ zerhackt :-) ).

nun gehen die probleme aber schon weiter:

ich hab zwar das verzeichnis nun in einem string, kann aber kein das leerzeichen nicht maskieren:

find -maxdepth 1 -type d | while read dir
do
echo $dir
masked=`echo $dir | sed -e 's/ /\\ /' `
if test -d $masked
then
echo "found it"
else
echo "NOT FOUND"
fi

done

gibt natürlich ein not found für die verzeichnisse mit space.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 23.02.2007 15:45:17

Mach mal aus

Code: Alles auswählen

test -d $masked

Code: Alles auswählen

test -d "$masked"

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 23.02.2007 16:52:22

nepos hat glaube ich folgendes gemeint:
Mach mal aus

Code: Alles auswählen

masked=`echo $dir | sed -e 's/ /\\ /' ` 
if test -d $masked
ein

Code: Alles auswählen

if test -d "$dir"
Gruß
gms

alexatdebian
Beiträge: 117
Registriert: 19.07.2004 18:17:42

Beitrag von alexatdebian » 24.02.2007 07:25:15

hallo,

ja, die "" funktrionieren. :schäm: hätt man ja auch selbst draufkommen können.

bei dem ganzen konstrukt handelt es sich um ein backupscript (kombination aus rsync und svn). und wo wir schon bei sonderzeichen sind:
svn hat manchmal probleme mit bestimmten files (meistens kommen die von win maschinen), wenn sie ä's etc. enthalten.
svn beschwert sich über eine 'invalid utf-8' sequence.

gibt es ein tool, welches das dateisystem durchgeht und alle nicht dem standard entsprechenden dateinamen heruasfinden kann?


gruß
alex

Antworten