SimonLZ Geschrieben 9. Januar 2008 Geschrieben 9. Januar 2008 Hallo, ich bekomme aus einem Programm ein Verzeichnislisting, ähnlich dem von "ls -l" generiert. Nun muss ich ausschließlich den Dateinamen davon auslesen. Alles kein Problem, solange keine Leerzeichen in diesem Dateinamen steht, erledigt das cat /home/ftp/xxxx/.listing |grep ^- | awk '{print \$9}' ohne probleme. Ist jedoch ein Leerezeichen enthalten, bringt der Befehl natürlich nur den Dateinamen bis zum ersten Leerzeichen Ich kann auch den Feldtrenner nicht ändern, da die anderen Spalten ja auch mit Leerzeichen getrennt sind. Ich bräuchte also eine Lösung, die je nachdem wieviele Leerzeichen im Datienamen enthalten sind, diesen aus 2 bis n Feldern zusammensetzt. Hier mal das Listing das ich erhalte. drwxr-xr-x 2 pokerschau_comm ftpusers 120 Jan 9 15:52 . drwxr-xr-x 7 pokerschau_comm ftpusers 65 Dec 6 20:58 .. -rw-r--r-- 1 pokerschau_comm ftpusers 2315 Jan 9 15:19 12_20088_1515_Pacip_ SD8-00.xml -rw-r--r-- 1 pokerschau_comm ftpusers 6106 Jan 9 15:52 188_2108_174_Ine_ S59.xml Wäre klasse wenn mir jemand einen Tipp geben könnte! Simon Zitieren
carstenj Geschrieben 9. Januar 2008 Geschrieben 9. Januar 2008 Hi, Kannst du die Liste nicht ändern? Oder die Dateinamen? Zitieren
bigvic Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 Hi, ich würde auch den Weg gehen, die Leerzeichen aus den Dateinamen rauszubekommen - ist nämlich ganz schlechter Stil. Falls nicht kommst du um Regular Expressions nicht drum rum. Quasi ... alles nach dem 8ten Leerzeichen ist das was ich suche. Ich bin mir jetzt aber nicht sicher, ob die AWK RegExp dies auch können, sind ja leider etwas beschränkt (hier kannst aber nachschauen)- mit Perl ist es ein Einzeiler, falls du umsteigen kannst. ciao, vic Zitieren
shutdown-Frnow Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 well ... ich würds einfach so machen $9 und $10 auszugeben ist zwar dirty, aber da der dateiname eh der letzte eintrag in deinem listing ist isses wohl schnurps falls es kein $10 gibt ... isses ja auch net schlimm also: cat /home/ftp/xxxx/.listing |grep ^- | awk '{print \$9 " "$10}' Zitieren
bigvic Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 Hi, und was machst, wenn der Dateiname "Ich bin so toll und schoen" heisst? ciao, vic Zitieren
shutdown-Frnow Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 ist ja nur ein vorschlag, ob ers so nutzen kann muss der TE selbst wissen ... ich hab ja gesagt das es ein sehr dirty workaround ist Zitieren
bigvic Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 Hi, Ich bräuchte also eine Lösung, die je nachdem wieviele Leerzeichen im Datienamen enthalten sind, diesen aus 2 bis n Feldern zusammensetzt. naja ich geh mal aufgrund seiner Aussage davon aus, dass ihn das nicht weiterbringt. ciao, vic Zitieren
Carnie Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 Sag beim cut doch einfach er soll nur das letzte Feld nehmen bis zum Ende. Der Teil davor sieht ja gleich aus bei allen Dateien. Schalter -f . Ups war ja cat und nicht cut. Naja dann pack einfach noch ein cut dazwischen Zitieren
bigvic Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 Hi, welchen "delemiter" würdest du bei cut nehmen? Ich kenne keinen, der so flexibel ist und 1-n Leerzeichen akzeptiert. Lass mich aber gerne eines besseren belehren. Wenn dann müsste man das ganze vorher durch tr jagen und die mehrfachen Leerzeichen löschen. Problem ist dann aber wieder, dass man auch die Leerzeichen aus den Dateinamen löschen würde ... ciao, vic Zitieren
bigvic Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 Hi, vielleicht klappt es sehr sehr dirty mit cat /home/ftp/xxxx/.listing |grep ^- |cut -c<Position of the first character of the filename>- falls sich die erste Position des Dateinamen nicht verändert. Bei mir hat es testweise geklappt, dennoch würde ich es dir nicht empfehlen, da sobald sich z.B. die Dateigrösse erheblich verändert auch der Anfangsbuchstabe verrutscht. ciao, vic Zitieren
shutdown-Frnow Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 so ich hab mal ein bisschen rumgetestet und eine sehr schöne lösung gefunden cat /home/ftp/xxxx/.listing |grep ^- | awk -F ":" '{print $2}'| sed -r 's/^.{3}//' als seperator nehm ich einfach das : der zeit, hab also dann noch die beiden minuten zahlen und ein leerzeichen vorm dateinamen, die ich dann mit dem sed wegschnibbel :bimei Zitieren
bigvic Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 Hi, solange der Dateiname keine ":" hat klappt das P.S.: Was benutzt du für ein sed? Meiner kennt die z.B. Option -r nicht. ciao, vic Zitieren
TheFinn Geschrieben 11. Januar 2008 Geschrieben 11. Januar 2008 so ich hab mal ein bisschen rumgetestet und eine sehr schöne lösung gefunden cat /home/ftp/xxxx/.listing |grep ^- | awk -F ":" '{print $2}'| sed -r 's/^.{3}//' als seperator nehm ich einfach das : der zeit, hab also dann noch die beiden minuten zahlen und ein leerzeichen vorm dateinamen, die ich dann mit dem sed wegschnibbel :bimei Hmm, oder so: cut -d ':' -f '2' < /home/ftp/xxxx/.listing | cut -d ' ' -f 2- Müßte bei einer großen Datei schneller sein, denke ich... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.