Dateinamen maskieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
becke
Beiträge: 365
Registriert: 29.11.2004 11:55:04
Wohnort: Ostwestfalen

Dateinamen maskieren

Beitrag von becke » 04.09.2008 16:55:38

Hallo,

ich habe hier ein kleines scripting-Problem:
ls -l sagt:

Code: Alles auswählen

$ ls -l
Gesamt 64
-rw-rw-r--   1 becke2   ta             0 Sep  4 16:42 bar
-rw-rw-r--   1 becke2   ta             0 Sep  4 16:42 foo
-rw-rw-r--   1 becke2   ta         32768 Sep  4 16:45 gegenberstellung zyvox 2007 vs. 2008.xls
-rw-rw-r--   1 becke2   ta             0 Sep  4 16:42 hallo welt
Ich möchte nun innerhalb eines Scriptes jede einzelne Datei verarbeiten. Wenn ich nun die Dateien in einer Schleife nacheinander aufrufe gibt es Probleme mit Sonderzeichen und Blanks.
Hier ein Beispielaufruf in der Art wie ich ihn im Script benötige:

Code: Alles auswählen

$ for i in $(find *);do echo $i;done                      
bar
foo
gegenberstellung
zyvox
2007
vs.
2008.xls
hallo
welt
Gibt es ein Programm womit ich in einer Pipe die Dateien maskieren kann?
Ich komm' leider nicht weiter... :?

Gruß,
Becke

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: Dateinamen maskieren

Beitrag von finupsen » 04.09.2008 17:32:27

moin,

Code: Alles auswählen

IFS=;for i in $(find *);do echo $i;done
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Benutzeravatar
detix
Beiträge: 1743
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Dateinamen maskieren

Beitrag von detix » 04.09.2008 17:39:12

oder so:

Code: Alles auswählen

for i in "$(find *)";do echo "$i";done
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

lhfloss
Beiträge: 261
Registriert: 07.10.2007 21:02:15
Lizenz eigener Beiträge: MIT Lizenz

Re: Dateinamen maskieren

Beitrag von lhfloss » 04.09.2008 19:43:13

was macht

Code: Alles auswählen

ls -x
(Kanns grad nicht ausprobieren, hab im Moment kein GNU/Linux zur Hand)

Benutzeravatar
becke
Beiträge: 365
Registriert: 29.11.2004 11:55:04
Wohnort: Ostwestfalen

Re: Dateinamen maskieren

Beitrag von becke » 05.09.2008 14:12:17

Danke erstmal,

aber wahrscheinlich ist die Anzahl der Dateien die in ich in meine Schleife verarbeiten möchte zu hoch, ich bekomme bei...

Code: Alles auswählen

IFS=;for i in $(find *);do echo $i;done
...am Ende ein:

Code: Alles auswählen

[...]überschreitet MAXPATHLEN 1024
Alle anderen Vorschläge funktionieren in meinem Script leider auch nicht.

Hier also ein neues Testscript, welches das Problem vielleicht anschaulicher hervorhebt...

Vorab ein neues ls -l:

Code: Alles auswählen

$ ls -l
Gesamt 6
-rw-rw-r--   1 becke2   ta            10 Sep  5 13:49 bar
-rw-rw-r--   1 becke2   ta            10 Sep  5 13:49 foo
-rw-rw-r--   1 becke2   ta             0 Sep  5 13:52 hallo welt
-rwxrwxr-x   1 becke2   ta            49 Sep  5 13:51 test.ksh
Script Version1:

Code: Alles auswählen

#!/bin/ksh

for i in $(find *)
do
	gfile $i
done
Output1:

Code: Alles auswählen

$ test.ksh 
bar: ASCII text
foo: ASCII text
hallo: can't stat `hallo' (No such file or directory)
welt: can't stat `welt' (No such file or directory)
test.ksh: a /bin/ksh script text executable
---------------------

Script Version2:

Code: Alles auswählen

#!/bin/ksh

for i in "$(find *)"
do
	gfile "$i"
done
Output2:

Code: Alles auswählen

$ test.ksh 
bar
foo
hallo welt
test.ksh: can't stat `bar
foo
hallo welt
test.ksh' (No such file or directory)
---------------------

Script Version3:

Code: Alles auswählen

#!/bin/ksh

IFS=;for i in $(find *)
do
	gfile $i
done
Output3:

Code: Alles auswählen

$ test.ksh 
bar
foo
hallo welt
test.ksh: can't stat `bar
foo
hallo welt
test.ksh' (No such file or directory)
... 3 ergibt denselben Output wie 2, aber wie anfangs gesagt, die Masse meine Dateien scheint IFS zu sprengen.

ls -x wird auch nicht funktionieren, da ich zudem in Unterverzeichnisse abtauchen muß.

Tja, wat' nu noch?

Gruß,
Becke

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: Dateinamen maskieren

Beitrag von Spasswolf » 05.09.2008 14:17:08

Wie wäre es damit?

Code: Alles auswählen

find Verzeichnis -exec (g)file {} \;
Sitzt du etwa an einem Bsd oder anderem Unix (wegen gfile)?

Benutzeravatar
becke
Beiträge: 365
Registriert: 29.11.2004 11:55:04
Wohnort: Ostwestfalen

Re: Dateinamen maskieren

Beitrag von becke » 05.09.2008 14:27:07

Fast richtig geraten: Solaris

Auf der Konsole funktioniert dein Vorschlag, aber wie binde ich den Code in mein Testscript ein?

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: Dateinamen maskieren

Beitrag von Spasswolf » 05.09.2008 15:33:46

So :D ?

Code: Alles auswählen

#!/bin/ksh
find . -exec gfile {} \;

lhfloss
Beiträge: 261
Registriert: 07.10.2007 21:02:15
Lizenz eigener Beiträge: MIT Lizenz

Re: Dateinamen maskieren

Beitrag von lhfloss » 06.09.2008 22:32:29

becke hat geschrieben:ls -x wird auch nicht funktionieren, da ich zudem in Unterverzeichnisse abtauchen muß.

Code: Alles auswählen

ls -Rx
Die Manpage sagt dazu:
-R, --recursive
Rekursive Ausgabe von Unterverzeichnissen.
-x Einträge in Zeilen statt in Spalten auflisten.

Benutzeravatar
becke
Beiträge: 365
Registriert: 29.11.2004 11:55:04
Wohnort: Ostwestfalen

Re: Dateinamen maskieren

Beitrag von becke » 08.09.2008 12:03:11

Spasswolf hat geschrieben:So :D ?

Code: Alles auswählen

#!/bin/ksh
find . -exec gfile {} \;
Ja, klar, aber ich benötige die Dateinamen jeweils in "$i" um sie weiter zu verarbeiten...
Zuletzt geändert von becke am 08.09.2008 12:05:50, insgesamt 1-mal geändert.

Benutzeravatar
becke
Beiträge: 365
Registriert: 29.11.2004 11:55:04
Wohnort: Ostwestfalen

Re: Dateinamen maskieren

Beitrag von becke » 08.09.2008 12:05:20

/root hat geschrieben:
becke hat geschrieben:ls -x wird auch nicht funktionieren, da ich zudem in Unterverzeichnisse abtauchen muß.

Code: Alles auswählen

ls -Rx
Die Manpage sagt dazu:
-R, --recursive
Rekursive Ausgabe von Unterverzeichnissen.
-x Einträge in Zeilen statt in Spalten auflisten.
Mal sehen:

Code: Alles auswählen

#!/bin/ksh

for i in $(ls -Rx)
do
   gfile $i
done
ergibt:

Code: Alles auswählen

$ test.ksh 
.:: can't stat `.:' (No such file or directory)
bar: ASCII text
foo: ASCII text
hallo: can't stat `hallo' (No such file or directory)
welt: can't stat `welt' (No such file or directory)
test.ksh: a /bin/ksh script text executable
klappt also auch nicht.

Antworten