Re: Dateinamen kürzen
Am 2006-06-29 23:13:15, schrieb Frank Terbeck: for file in *.tar.gz.done ; do mv -i $file ${file%.done} ; done Uff... - Das verändert die ctime und mtime! Wie währe es mit: find -type f -name *.done -exec rename s/\.done// {}';' Greetings Michelle Konzack Systemadministrator Tamay Dogan Network Debian GNU/Linux Consultant -- Linux-User #280138 with the Linux Counter, http://counter.li.org/ # Debian GNU/Linux Consultant # Michelle Konzack Apt. 917 ICQ #328449886 50, rue de Soultz MSM LinuxMichi 0033/6/6192519367100 Strasbourg/France IRC #Debian (irc.icq.com) -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Hallo Michelle, Michelle Konzack [EMAIL PROTECTED] wrote: Am 2006-06-29 23:13:15, schrieb Frank Terbeck: for file in *.tar.gz.done ; do mv -i $file ${file%.done} ; done Uff... - Das verändert die ctime und mtime! Nein. Die mtime wird von mv nicht angefasst -- die Datei wird doch nicht modifiziert. Wie währe es mit: find -type f -name *.done -exec rename s/\.done// {}';' Das gleiche. % touch bla; stat bla File: ?bla? Size: 0 Blocks: 0 IO Block: 4096 reguläre leere Datei Device: fh/15d Inode: 368233 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ joerg) Gid: ( 100/ users) Access: 2006-08-18 14:10:46.0 +0200 Modify: 2006-08-18 14:10:46.0 +0200 Change: 2006-08-18 14:10:46.0 +0200 % mv bla foo; stat foo File: ?foo? Size: 0 Blocks: 0 IO Block: 4096 reguläre leere Datei Device: fh/15d Inode: 368233 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ joerg) Gid: ( 100/ users) Access: 2006-08-18 14:10:46.0 +0200 Modify: 2006-08-18 14:10:46.0 +0200 Change: 2006-08-18 14:11:09.634491311 +0200 % rename 's/foo/blubb/' foo; stat blubb File: ?blubb? Size: 0 Blocks: 0 IO Block: 4096 reguläre leere Datei Device: fh/15d Inode: 368233 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ joerg) Gid: ( 100/ users) Access: 2006-08-18 14:10:46.0 +0200 Modify: 2006-08-18 14:10:46.0 +0200 Change: 2006-08-18 14:11:24.167221311 +0200 Schöne Grüße, Jörg. -- Science is the game we play with God to find out what his rules are. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Andreas Pakulat [EMAIL PROTECTED]: On 30.06.06 16:29:46, Frank Terbeck wrote: Andreas Pakulat [EMAIL PROTECTED]: ls | grep done$ | while read f... Das ist ganz einfach nicht nötig. Unter anderem sollte man sich sicher sein, das ls nicht als Alias expandiert und dann Optionen wie '--color=always' oder '-F' verwendet. --color=auto hatte ich, grad mal rausgenommen. 'auto' ist nicht gravierend, 'always' wäre gravierend, weil etwaige Controlcodes mit ausgegeben würden, egal welches Ausgabemedium ls erkennt. Im übrigen sollte jede Shell mit sehr langen Listen in for Schleifen klarkommen. Also die Bash hier kommt mit 3700 Mails im monatl. d-u-g Ordner nicht zurecht wenn ich alle auflisten lasse (73 Zeichen pro Zeile) Da würde mich aber interessieren, welches Kommando du da anwendest. ls, [EMAIL PROTECTED]:~/.Mail/debian-user-german.2006-05/curalias ls=ls [EMAIL PROTECTED]:~/.Mail/debian-user-german.2006-05/curwhich ls /bin/ls [EMAIL PROTECTED]:~/.Mail/debian-user-german.2006-05/cur/bin/ls *morpheus* bash: /bin/ls: Die Argumentliste ist zu lang Ja, an einen externen Befehl können Argumentlisten schnell mal zu lang werden. Aber es ging ja hier um for-Schleifen. Denn bei shellinternen Kommandos ist die Menge der Argumente lediglich durch den zur Verfügung stehenden Speicher begrenzt. Ich benutze kein bash-internes ls. Warum weiss ich nicht, ich hab diesbzgl. nichts verstellt. Ich bin auch nicht sicher ob die bash ein internes ls hat. Das ist aber auch nicht der Punkt. Wenn die Argumentliste zu lang wird, dann kann man das triviale Kommando entweder in eine for-Schleife umwandeln oder spezialisierte Programme wie xargs verwenden. Ich habe gerade mal eine bash gestartet und eine for Schleife mit vier Millionen Argumenten gestartet: for i in $(seq 1 400) ; do echo $i ; done for geht hier auch wunderbar. Gut, und daher wird in deinem Anwendungsfall auch eine Schleife der Art for i in *morpheus* ; do ls $i ; done funktionieren. Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Am Donnerstag, den 29.06.2006, 23:47 +0200 schrieb Robert Michel: Mag sein, aber es ist etwas was ich benutzen konnte ohne nachzuschlagen... Erhöht außerdem die Lesbarkeit für Leute die - wie wohl der OP - nicht bis zu den Ellenbogen in den Gedärmen der bash stecken.
Re: Dateinamen kürzen
Danijel Tasov wrote: file=was.done echo ${file%.done} Ah ja. Offensichtlich funktioniert dieser Trick nur mit Variablen. Danke. ---(kaimartin)--- -- Kai-Martin Knaak http://lilalaser.de/blog -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
On 30.06.06 00:39:07, Danijel Tasov wrote: Andreas Pakulat wrote: Bei ls *.done | while wird die Argumentliste genauso zu lang. Wenn, dann muss man da find benutzen. Stimmt. Ausserdem interpretiert read die Eingabe, hoert ein Dateiname zum beispiel mit einem backslash auf, empfiehlt es sich read -r zu verwenden. (Zugegeben, in diesem Fall kommt das nicht vor). Ebenfalls richtig. Hinzukommt, dass ls | while read auch nicht geht, wenn der Dateiname mit Leerzeichen anfaengt, das umgeht man mit ls | while IFS= read -r. Auch richtig. Der Haken der Jetzt noch uebrig bleibt, ist, wenn Newlines in einem Dateinamen vorkommen. Da fallen mir nur extrem haessliche Loesungen fuer ein. find hilft doch aber, oder irre ich mich jetzt? find kennt -print0, man muesste also IFS nur auf \0 umbiegen, ein kurzer Test dazu schlug leider fehlt. Andreas -- Your object is to save the world, while still leading a pleasant life. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
On 30.06.06 01:15:54, Frank Terbeck wrote: Andreas Pakulat [EMAIL PROTECTED]: [...] Noch besser als for i in *.done oder for i in $(ls *.done) ist ls *.done | while read f ; do ... ; done gerade wenns sehr viele Dateien sind, denn dann ist die Argumentliste zu lang und man landet auf der Nase... Also, an dieser Stelle kann das überhaupt nicht besser funktionieren als *.done, weil du die Dateiliste so genauso gut komplett an ls übergibts. Ist ja gut :-) War ein kleiner Schnellschuss, meistens mache ich eher sowas: ls | grep done$ | while read f... Im übrigen sollte jede Shell mit sehr langen Listen in for Schleifen klarkommen. Also die Bash hier kommt mit 3700 Mails im monatl. d-u-g Ordner nicht zurecht wenn ich alle auflisten lasse (73 Zeichen pro Zeile) In der Standardeinstellung natuerlich... Andreas -- If you stand on your head, you will get footprints in your hair. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Andreas Pakulat [EMAIL PROTECTED]: On 30.06.06 01:15:54, Frank Terbeck wrote: Andreas Pakulat [EMAIL PROTECTED]: [...] Noch besser als for i in *.done oder for i in $(ls *.done) ist ls *.done | while read f ; do ... ; done gerade wenns sehr viele Dateien sind, denn dann ist die Argumentliste zu lang und man landet auf der Nase... Also, an dieser Stelle kann das überhaupt nicht besser funktionieren als *.done, weil du die Dateiliste so genauso gut komplett an ls übergibts. Ist ja gut :-) War ein kleiner Schnellschuss, meistens mache ich eher sowas: ls | grep done$ | while read f... Das ist ganz einfach nicht nötig. Unter anderem sollte man sich sicher sein, das ls nicht als Alias expandiert und dann Optionen wie '--color=always' oder '-F' verwendet. Im übrigen sollte jede Shell mit sehr langen Listen in for Schleifen klarkommen. Also die Bash hier kommt mit 3700 Mails im monatl. d-u-g Ordner nicht zurecht wenn ich alle auflisten lasse (73 Zeichen pro Zeile) Da würde mich aber interessieren, welches Kommando du da anwendest. Denn bei shellinternen Kommandos ist die Menge der Argumente lediglich durch den zur Verfügung stehenden Speicher begrenzt. Ich habe gerade mal eine bash gestartet und eine for Schleife mit vier Millionen Argumenten gestartet: for i in $(seq 1 400) ; do echo $i ; done Das dauert zwar ewig und verbraucht Speicher wie nichts Gutes. Aber es funktioniert. Wenn man die Argumentliste noch grösser macht, dann rennt man irgendwann in Out of Memory Situationen, je nach dem wie gut der jeweilige Rechner bestückt ist. Knapp 4000 Dateien werden überhaupt kein Problem sein. Ich habe hier nur mal zur Demonstration die *.{c,h} Dateinen in einem relativ aktuellen Linux Kernel Baum gezählt: [snip] /src/linux-2.6.16.16% for i in **/*.[ch] ; do echo $i ; done | wc -l 15793 [snap] Wo ich schon mal dabei bin, zähle ich noch schnell sämtliche regulären Dateien auf meinem Laptop: [snap] ~% for i in /**/*(.) ; do echo $i ; done | wc -l 193183 [snap] Also knapp Zweihunderttausend Dateien. Alles kein Problem. Ich bin im realen Leben bisher noch nie an das theoretische Limit des Speichers angelangt. Höchstens durch Experimente wie das oben genannte. Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
On 30.06.06 16:29:46, Frank Terbeck wrote: Andreas Pakulat [EMAIL PROTECTED]: On 30.06.06 01:15:54, Frank Terbeck wrote: Andreas Pakulat [EMAIL PROTECTED]: [...] Noch besser als for i in *.done oder for i in $(ls *.done) ist ls *.done | while read f ; do ... ; done gerade wenns sehr viele Dateien sind, denn dann ist die Argumentliste zu lang und man landet auf der Nase... Also, an dieser Stelle kann das überhaupt nicht besser funktionieren als *.done, weil du die Dateiliste so genauso gut komplett an ls übergibts. Ist ja gut :-) War ein kleiner Schnellschuss, meistens mache ich eher sowas: ls | grep done$ | while read f... Das ist ganz einfach nicht nötig. Unter anderem sollte man sich sicher sein, das ls nicht als Alias expandiert und dann Optionen wie '--color=always' oder '-F' verwendet. --color=auto hatte ich, grad mal rausgenommen. Im übrigen sollte jede Shell mit sehr langen Listen in for Schleifen klarkommen. Also die Bash hier kommt mit 3700 Mails im monatl. d-u-g Ordner nicht zurecht wenn ich alle auflisten lasse (73 Zeichen pro Zeile) Da würde mich aber interessieren, welches Kommando du da anwendest. ls, [EMAIL PROTECTED]:~/.Mail/debian-user-german.2006-05/curalias ls=ls [EMAIL PROTECTED]:~/.Mail/debian-user-german.2006-05/curwhich ls /bin/ls [EMAIL PROTECTED]:~/.Mail/debian-user-german.2006-05/cur/bin/ls *morpheus* bash: /bin/ls: Die Argumentliste ist zu lang Denn bei shellinternen Kommandos ist die Menge der Argumente lediglich durch den zur Verfügung stehenden Speicher begrenzt. Ich benutze kein bash-internes ls. Warum weiss ich nicht, ich hab diesbzgl. nichts verstellt. Ich habe gerade mal eine bash gestartet und eine for Schleife mit vier Millionen Argumenten gestartet: for i in $(seq 1 400) ; do echo $i ; done for geht hier auch wunderbar. Andreas -- You will be the victim of a bizarre joke. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Dateinamen kürzen
Hallo zusammen, kann jemand einem der Kunst des Skript-Schreibens nicht sooo kundigen einen Tip geben, ich möchte Dateinamen mit einer bestimmten Endung um eben diese Endung kürzen. Also z.B.: Ich habe in einem Verzeichnis viele Dateien, die nach folgendem Schema benannt sind: *.tar.gz.done und würde gerne in den Dateinamen das .done abschneiden, so daß am Ende nur noch Dateinamen mit dem Schema *.tar.gz übrigbleiben. Any idea? Gruß Dejan -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Dejan Milosavljevic wrote: Hallo zusammen, kann jemand einem der Kunst des Skript-Schreibens nicht sooo kundigen einen Tip geben, ich möchte Dateinamen mit einer bestimmten Endung um eben diese Endung kürzen. Also z.B.: Ich habe in einem Verzeichnis viele Dateien, die nach folgendem Schema benannt sind: *.tar.gz.done und würde gerne in den Dateinamen das .done abschneiden, so daß am Ende nur noch Dateinamen mit dem Schema *.tar.gz übrigbleiben. Any idea? Gruß Dejan Hallo, falls ein GUI gewuenscht ist und KDE installiert ist / KDE Anwendungen unter Gnome laufen: krename lg -- ### # # # # wolfgang # # # #friedl -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Dejan Milosavljevic [EMAIL PROTECTED]: kann jemand einem der Kunst des Skript-Schreibens nicht sooo kundigen einen Tip geben, ich möchte Dateinamen mit einer bestimmten Endung um eben diese Endung kürzen. Also z.B.: Ich habe in einem Verzeichnis viele Dateien, die nach folgendem Schema benannt sind: *.tar.gz.done und würde gerne in den Dateinamen das .done abschneiden, so daß am Ende nur noch Dateinamen mit dem Schema *.tar.gz übrigbleiben. for file in *.tar.gz.done ; do mv -i $file ${file%.done} ; done Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
On Thu, 29 Jun 2006 23:05:01 +0200 wolfgang friedl [EMAIL PROTECTED] wrote: Dejan Milosavljevic wrote: Hallo zusammen, kann jemand einem der Kunst des Skript-Schreibens nicht sooo kundigen einen Tip geben, ich möchte Dateinamen mit einer bestimmten Endung um eben diese Endung kürzen. Also z.B.: Ich habe in einem Verzeichnis viele Dateien, die nach folgendem Schema benannt sind: *.tar.gz.done und würde gerne in den Dateinamen das .done abschneiden, so daß am Ende nur noch Dateinamen mit dem Schema *.tar.gz übrigbleiben. Any idea? Gruß Dejan Hallo, falls ein GUI gewuenscht ist und KDE installiert ist / KDE Anwendungen unter Gnome laufen: krename lg Und wenn weder KDE noch GUI, dann lässt du das k vorne weg. rename ist ein mächtiges Tool, das gut RegEx spricht etc. Ist übrigens ein Teil des perl Packages. -- ^^^| Evgeni -SargentD- Golov ([EMAIL PROTECTED]) d(O_o)b | PGP-Key-ID: 0xAC15B50C -|- | WWW: http://www.die-welt.net ICQ: 54116744 / \| IRC: #sod @ irc.german-freakz.net Fuer windows hab keine Zeit weil wenn ich nachhause komm will ich lieber poppen und nich noch mein OS reparieren (Therion - german-freakz.net) pgpLdBdfEGHd9.pgp Description: PGP signature
Re: Dateinamen kürzen
Dejan Milosavljevic wrote: und würde gerne in den Dateinamen das .done abschneiden, so daß am Ende nur noch Dateinamen mit dem Schema *.tar.gz übrigbleiben. man basename Im speziellen Fall: for i in *.done ; do mv $i `basename $i .done` ; done Statt den Semicolons kannst Du das Ganze auch auf drei Zeilen verteilen. Beachte, dass der basename-Befehl von dem Anführungszeichen eingerahmt ist, das man mit shift auf der Taste schräg über dem ü bekommt. ---(kaimartin)--- -- Kai-Martin Knaak http://lilalaser.de/blog -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
kai-martin knaak schrieb: Dejan Milosavljevic wrote: und wrde gerne in den Dateinamen das .done abschneiden, so da am Ende nur noch Dateinamen mit dem Schema *.tar.gz brigbleiben. man basename Im speziellen Fall: for i in *.done ; do mv $i `basename $i .done` ; done Statt den Semicolons kannst Du das Ganze auch auf drei Zeilen verteilen. Beachte, dass der basename-Befehl von dem Anfhrungszeichen eingerahmt ist, das man mit shift auf der Taste schrg ber dem bekommt. ---(kaimartin)--- Ja prima, basename ist fr mich das Mittel der ersten Wahl. So einfach gehts. :-) Vielen Dank, auch den anderen mit den schnellen Antworten. Die Lsung mit rename ist auch recht schlank anwendbar, habe aber in der Krze der zur Verfgung stehenden Zeit keinen Nerv mich mit Perl-Regexp auseinanderzusetzen. Nochmals danke! Gru Dejan
Re: Dateinamen kürzen
kai-martin knaak [EMAIL PROTECTED]: Dejan Milosavljevic wrote: und würde gerne in den Dateinamen das .done abschneiden, so daß am Ende nur noch Dateinamen mit dem Schema *.tar.gz übrigbleiben. man basename Wozu einen externes Programm, wenn das mit shellinternen Mitteln problemlos zu lösen ist? Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Salve Dejan! Hast Du keine Lösungsidee, keinen eignen Ansatz? On Thu, 29 Jun 2006, Dejan Milosavljevic wrote: Hallo zusammen, kann jemand einem der Kunst des Skript-Schreibens nicht sooo kundigen einen Tip geben, http://www.tldp.org/LDP/abs/html/ *.tar.gz.done - *.tar.gz übrigbleiben. Any idea? for i in $(ls *.done); do mv $i $(echo $i| sed s/.done$//); done (Diese Lösung gilt für die Bash, inwieweit dies Lösung bei anderen Shells laufen weiß ich nicht.) Wie kommt man auf soetwas? 1. alle Dateinamen ausgeben, die mit *.done enden: ls *.done 2. man möchte diese Liste verarbeiten, man könnte es in eine Datei schreiben, oder halt mit einer Subshell $( Befehl| Befehl2) abarbeiten und ausgeben lassen. 3. ein Schleife kann man mit Parameter aus einer Datei, oder halt aus eine Subshell füttern for i in Dateiname; do befehl1| befehl2; done innerhalb kann man die Variable $i benutzen Also 1. liefert z.B. done.1.done done.2.done done.3.done for i in (ls *.done) erzeugt 3 Schleifendurchgänge, wobei bei der ersten $i = done.1.done ist beim zweiten $i = done.2.done usw jetzt will man die Files umbennen, das geht mit mv mv $i $VerkürzterDateiname Wie kann man den Dateinamen kürzen? Sed! echo done.1.done | sed s/done// würde .1. liefern - es könne ein done im Dateinamen stecken. Will man nur das .done am ende löschen, so braucht man die Regular Expression $ die das Zeilenende markiert. .done$ ist also ein Muster, welches nur am Ende vorkommt, diese Muster kann man durch // also nichts ersetzten: Statt direkt mv die Dateinamen zu ändern und sich mit einem Denkfehler einzuhandeln ersteinmal ohne mv laufen lassen: ls *.done - Ok ich habe alle Dateien die ich verändern will for i in $(ls *.done); do echo $i| sed s/.done$//; done - Ok, die veränderung ist für alle korrekt for i in $(ls *.done); do mv $i $(echo $i| sed s/.done$//); done Skripten lernt man in dem man damit rumspielt und von einfacheren Lösungen Schrittweise ins komplexerer geht. Hat man eine relativ komplexe Aufgabe, so teilt man sie in kleine Probleme, bei der man teilweise die Lösungen schon kennt, oder weis wie es geht - Schritt für schritt wird man mit dem Skripten vertrauter. Bevor man eine Mailingliste fragt, sollte man zumindest eine Weile über eingene Lösungsmöglichkeiten nachdenken und dann sein Wissen ergänzen lassen. Und ich würde nicht sagen, das ich viel kann. also viel Spaß beim Lernen, rob
Re: Dateinamen kürzen
Frank Terbeck schrieb: kai-martin knaak [EMAIL PROTECTED]: Dejan Milosavljevic wrote: und wrde gerne in den Dateinamen das .done abschneiden, so da am Ende nur noch Dateinamen mit dem Schema *.tar.gz brigbleiben. man basename Wozu einen externes Programm, wenn das mit shellinternen Mitteln problemlos zu lsen ist? Gruss, Frank Und? Spann uns nicht auf die Folter. ;-) Wie sieht dein Vorschlag aus? Gru Dejan
Re: Dateinamen kürzen
Robert Michel schrieb: Salve Dejan! Hast Du keine Lösungsidee, keinen eignen Ansatz? On Thu, 29 Jun 2006, Dejan Milosavljevic wrote: Hallo zusammen, kann jemand einem der Kunst des Skript-Schreibens nicht sooo kundigen einen Tip geben, http://www.tldp.org/LDP/abs/html/ *.tar.gz.done - *.tar.gz übrigbleiben. Any idea? for i in $(ls *.done); do mv $i $(echo $i| sed s/.done$//); done (Diese Lösung gilt für die Bash, inwieweit dies Lösung bei anderen Shells laufen weiß ich nicht.) Wie kommt man auf soetwas? 1. alle Dateinamen ausgeben, die mit *.done enden: ls *.done 2. man möchte diese Liste verarbeiten, man könnte es in eine Datei schreiben, oder halt mit einer Subshell $( Befehl| Befehl2) abarbeiten und ausgeben lassen. 3. ein Schleife kann man mit Parameter aus einer Datei, oder halt aus eine Subshell füttern for i in Dateiname; do befehl1| befehl2; done innerhalb kann man die Variable $i benutzen Also 1. liefert z.B. done.1.done done.2.done done.3.done for i in (ls *.done) erzeugt 3 Schleifendurchgänge, wobei bei der ersten $i = done.1.done ist beim zweiten $i = done.2.done usw jetzt will man die Files umbennen, das geht mit mv mv $i $VerkürzterDateiname Wie kann man den Dateinamen kürzen? Sed! echo done.1.done | sed s/done// würde .1. liefern - es könne ein done im Dateinamen stecken. Will man nur das .done am ende löschen, so braucht man die Regular _expression_ $ die das Zeilenende markiert. ".done$" ist also ein Muster, welches nur am Ende vorkommt, diese Muster kann man durch // also nichts ersetzten: Statt direkt mv die Dateinamen zu ändern und sich mit einem Denkfehler einzuhandeln ersteinmal ohne mv laufen lassen: ls *.done - Ok ich habe alle Dateien die ich verändern will for i in $(ls *.done); do echo $i| sed s/.done$//; done - Ok, die veränderung ist für alle korrekt for i in $(ls *.done); do mv $i $(echo $i| sed s/.done$//); done Skripten lernt man in dem man damit rumspielt und von einfacheren Lösungen Schrittweise ins komplexerer geht. Hat man eine relativ komplexe Aufgabe, so teilt man sie in kleine Probleme, bei der man teilweise die Lösungen schon kennt, oder weis wie es geht - Schritt für schritt wird man mit dem Skripten vertrauter. Bevor man eine Mailingliste fragt, sollte man zumindest eine Weile über eingene Lösungsmöglichkeiten nachdenken und dann sein Wissen ergänzen lassen. Und ich würde nicht sagen, das ich viel kann. also viel Spaß beim Lernen, rob Hallo Michel, ich habe hier einen halben Tag lang mit awk rumprobiert, aber kam auf keine grünen Zweig. Stell Dir vor: Ich habs nicht hinbekommen! Gruß Dejan
Re: Dateinamen kürzen
Robert Michel [EMAIL PROTECTED]: On Thu, 29 Jun 2006, Dejan Milosavljevic wrote: Hallo zusammen, kann jemand einem der Kunst des Skript-Schreibens nicht sooo kundigen einen Tip geben, http://www.tldp.org/LDP/abs/html/ *.tar.gz.done - *.tar.gz übrigbleiben. Any idea? for i in $(ls *.done); do mv $i $(echo $i| sed s/.done$//); done (Diese Lösung gilt für die Bash, inwieweit dies Lösung bei anderen Shells laufen weiß ich nicht.) Wie kommt man auf soetwas? Ja. Wozu ls benutzen um an eine Dateiliste zu kommen? Das ist ja wild. Einfach 'for i in *.done' reicht. Und sed zu bemühen nur um einen String am Ende einer Variable abzuschneiden, ist auch Overkill ohne Ende. ${i%.done} funktioniert in sämtlichen POSIX konformen Shells. Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
On Thu, 29 Jun 2006 23:31:23 +0200 Dejan Milosavljevic [EMAIL PROTECTED] wrote: Vielen Dank, auch den anderen mit den schnellen Antworten. Die Lösung mit rename ist auch recht schlank anwendbar, habe aber in der Kürze der zur Verfügung stehenden Zeit keinen Nerv mich mit Perl-Regexp auseinanderzusetzen. Nochmals danke! rename 's/.done//' *.done Ist ja wohl kaum schwer, und auch keine PerlRegex eigenart ;-) -- ^^^| Evgeni -SargentD- Golov ([EMAIL PROTECTED]) d(O_o)b | PGP-Key-ID: 0xAC15B50C -|- | WWW: http://www.die-welt.net ICQ: 54116744 / \| IRC: #sod @ irc.german-freakz.net Frueher nahmen wir pr0n, um die Leitung vollzumachen. Heute tun's auch KDE-updates (jjFux - IRCNet) pgpjA5fkSB1X0.pgp Description: PGP signature
Re: Dateinamen kürzen
Dejan Milosavljevic [EMAIL PROTECTED]: Wozu einen externes Programm, wenn das mit shellinternen Mitteln problemlos zu lösen ist? Und? Spann uns nicht auf die Folter. ;-) Wie sieht dein Vorschlag aus? Habe die Antwort schon vorher in den Thread geschickt. Siehe auch: [EMAIL PROTECTED] ${file%.done} Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
On Thu, 29 Jun 2006 23:39:02 +0200 Evgeni Golov [EMAIL PROTECTED] wrote: On Thu, 29 Jun 2006 23:31:23 +0200 Dejan Milosavljevic [EMAIL PROTECTED] wrote: Vielen Dank, auch den anderen mit den schnellen Antworten. Die Lösung mit rename ist auch recht schlank anwendbar, habe aber in der Kürze der zur Verfügung stehenden Zeit keinen Nerv mich mit Perl-Regexp auseinanderzusetzen. Nochmals danke! rename 's/.done//' *.done ^ ups, \. Hm, just for the case, du hast mehrere .done im namen: s/\.done$// -- ^^^| Evgeni -SargentD- Golov ([EMAIL PROTECTED]) d(O_o)b | PGP-Key-ID: 0xAC15B50C -|- | WWW: http://www.die-welt.net ICQ: 54116744 / \| IRC: #sod @ irc.german-freakz.net Wir sind Borg, Widerstand ist Spannung durch Stromstärke! pgpunyXImM6wS.pgp Description: PGP signature
Re: Dateinamen kürzen
Frank Terbeck schrieb: Dejan Milosavljevic [EMAIL PROTECTED]: kann jemand einem der Kunst des Skript-Schreibens nicht sooo kundigen einen Tip geben, ich mchte Dateinamen mit einer bestimmten Endung um eben diese Endung krzen. Also z.B.: Ich habe in einem Verzeichnis viele Dateien, die nach folgendem Schema benannt sind: *.tar.gz.done und wrde gerne in den Dateinamen das .done abschneiden, so da am Ende nur noch Dateinamen mit dem Schema *.tar.gz brigbleiben. for file in *.tar.gz.done ; do mv -i $file ${file%.done} ; done Gruss, Frank Sorry, ich verstehe es nicht, auch wenns ein Einzeiler ist: Mein Auge bleibt immer am % in ${file%.done}hngen - was hat es damit auf sich?
Re: Dateinamen kürzen
Salve Frank! On Thu, 29 Jun 2006, Frank Terbeck wrote: Ja. Wozu ls benutzen um an eine Dateiliste zu kommen? Das ist ja wild. Einfach 'for i in *.done' reicht. Das habe ich eben auch gesehen, ich hätte gedacht das 'for i in file' die Datei file genommen hätte... Viele Wege führen nach rom, wenn man ls *.done kennt, so kann man dies doch ruhig benutzen - mag zwar wild sein aber das nette einer Mailingliste ist, das man feedback bekommt, wie man es besser, wie man es alternativ machen kann. Und sed zu bemühen nur um einen String am Ende einer Variable abzuschneiden, ist auch Overkill ohne Ende. Mag sein, aber es ist etwas was ich benutzen konnte ohne nachzuschlagen... ${i%.done} funktioniert in sämtlichen POSIX konformen Shells. Kann man das auch so in VIM benuzten? Die Sedausdrrücke schon, und ich nutze VIM auch zusammen mit mutt und elinks täglich ;) Trozdem nett dazuzuleren... ;) rob
Re: Dateinamen kürzen
Dejan Milosavljevic schrieb: Hallo Michel, ich habe hier einen halben Tag lang mit awk rumprobiert, aber kam auf keine grünen Zweig. Stell Dir vor: Ich habs nicht hinbekommen! Gruß Dejan Hallo Dejan, auch das hättest du recht einfach haben können ... for i in *done do echo $i | awk -F.done '{print $1}' done Ist aber mit Kanonen auf Spatzen schießen ;-) Gruß ; Michael -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Dejan Milosavljevic [EMAIL PROTECTED]: Frank Terbeck schrieb: for file in *.tar.gz.done ; do mv -i $file ${file%.done} ; done Sorry, ich verstehe es nicht, auch wenns ein Einzeiler ist: Mein Auge bleibt immer am % in ${file%.done}hängen - was hat es damit auf sich? Ist ja nicht schlimm. Als erster Anlaufpunkt ist bei sowas immer die Doku der Shell die man nutzt. Da sollte sowas auf jeden Fall erläutert sein. Ich zitiere mal aus dem SUSv3 Standard: [snip] ${parameter%word} Remove Smallest Suffix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result in parameter, with the smallest portion of the suffix matched by the pattern deleted. [snap] Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
On 29.06.06 23:47:22, Robert Michel wrote: Salve Frank! On Thu, 29 Jun 2006, Frank Terbeck wrote: Ja. Wozu ls benutzen um an eine Dateiliste zu kommen? Das ist ja wild. Einfach 'for i in *.done' reicht. Das habe ich eben auch gesehen, ich hätte gedacht das 'for i in file' die Datei file genommen hätte... Viele Wege führen nach rom, wenn man ls *.done kennt, so kann man dies doch ruhig benutzen - mag zwar wild sein aber das nette einer Mailingliste ist, das man feedback bekommt, wie man es besser, wie man es alternativ machen kann. Noch besser als for i in *.done oder for i in $(ls *.done) ist ls *.done | while read f ; do ... ; done gerade wenns sehr viele Dateien sind, denn dann ist die Argumentliste zu lang und man landet auf der Nase... Andreas -- You prefer the company of the opposite sex, but are well liked by your own. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
BTW everything is a file , but.... wie hätte man es mit vim machen k önnen? Re: Dateinamen kürzen
Salve Michael! auch das hättest du recht einfach haben können ... for i in *done do echo $i | awk -F.done '{print $1}' done Das ändert die Dateinamen? Ist aber mit Kanonen auf Spatzen schießen ;-) also ich habe ein verzeichnis Test vim Test :%s/.done$// E21: Kann keine Änderungen machen, 'modifiable' ist aus :set modifiable :%s/.done$// W10: Warnung: Ändern einer schreibgeschützten Datei 4 Ersetzungen auf 4 Zeilen Drücken Sie die EINGABETASTE oder geben Sie einen Befehl ein EINGABETASTE ;) :wq E382: Kann nicht schreiben, 'buftype'-Option ist gesetzt :set buftype buftype=nowrite Vielleicht :set buftype=write E474: Invalid argument: buftype=write Also, wie ginge es mit VIM? rob
Re: Dateinamen kürzen
Frank Terbeck [EMAIL PROTECTED]: for file in *.tar.gz.done ; do mv -i $file ${file%.done} ; done Ich hasse es mich selber verbessern zu müssen, aber als altem zshler sind einem Dateinamen mit Leerzeichen ziemlich egal. Die meisten anderen Shells müssen darauf achten. Also besser: for file in *.tar.gz.done ; do mv -i $file ${file%.done} ; done Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Frank Terbeck schrieb: Dejan Milosavljevic [EMAIL PROTECTED]: Frank Terbeck schrieb: for file in *.tar.gz.done ; do mv -i $file ${file%.done} ; done Sorry, ich verstehe es nicht, auch wenns ein Einzeiler ist: Mein Auge bleibt immer am % in ${file%.done}hngen - was hat es damit auf sich? Ist ja nicht schlimm. Als erster Anlaufpunkt ist bei sowas immer die Doku der Shell die man nutzt. Da sollte sowas auf jeden Fall erlutert sein. Ich zitiere mal aus dem SUSv3 Standard: [snip] ${parameter%word} Remove Smallest Suffix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result in parameter, with the smallest portion of the suffix matched by the pattern deleted. [snap] Gruss, Frank Also bei mir funktionierts nicht. Es kommt folgende Fehlermeldung (benutze brigens Sarge): www:~/hilf# for file in *.tar.gz.done ; do mv -i $file $(file%.done) ; done -bash: file%.done: command not found mv: Fehlendes Dateiargument ,,mv --help" gibt weitere Informationen. www:~/hilf# -bash: file%.done: command not found Habe vorher ein Testfile angelegt (touch foo.tar.gz.done) Und bei Dir gehts mit der Bash unter Debian? Wo ist nun der Unterschied zwischen unseren Shells? Gru Dejan
Re: BTW everything is a file, but .... wie hätte man es mit vim mac hen können? Re: Dateinamen kürzen
Robert Michel schrieb: Salve Michael! auch das hättest du recht einfach haben können ... for i in *done do echo $i | awk -F.done '{print $1}' done Das ändert die Dateinamen? Nee sorry, war nicht zu Ende gebracht, es zeigt nur die Namen ohne die Erweiterung. Wollte ja auch nur demonstrieren, dass awk das auch kann. Aber mit einem weiteren Handgriff ... Gruß ; Michael -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Dejan Milosavljevic [EMAIL PROTECTED]: Frank Terbeck schrieb: ${parameter%word} Also bei mir funktionierts nicht. Es kommt folgende Fehlermeldung (benutze übrigens Sarge): /www:~/hilf# for file in *.tar.gz.done ; do mv -i $file $(file%.done) ; done -bash: file%.done: command not found mv: Fehlendes Dateiargument ,,mv --help gibt weitere Informationen. www:~/hilf# -bash: file%.done: command not found/ Habe vorher ein Testfile angelegt (touch foo.tar.gz.done) Und bei Dir gehts mit der Bash unter Debian? Wo ist nun der Unterschied zwischen unseren Shells? Nein, meine Lösung funktioniert in jeder Shell die sich an POSIX hält. Damit auch in bash, zsh oder auch dash. Dein Fehler ist, dass du nicht richtig gelesen hast. $(...) macht nämlich etwas ganz anderes als ${...}. Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Frank Terbeck schrieb: Dejan Milosavljevic [EMAIL PROTECTED]: Frank Terbeck schrieb: ${parameter%word} Also bei mir funktionierts nicht. Es kommt folgende Fehlermeldung (benutze brigens Sarge): /www:~/hilf# for file in *.tar.gz.done ; do mv -i $file $(file%.done) ; done -bash: file%.done: command not found mv: Fehlendes Dateiargument ,,mv --help" gibt weitere Informationen. www:~/hilf# -bash: file%.done: command not found/ Habe vorher ein Testfile angelegt (touch foo.tar.gz.done) Und bei Dir gehts mit der Bash unter Debian? Wo ist nun der Unterschied zwischen unseren Shells? Nein, meine Lsung funktioniert in jeder Shell die sich an POSIX hlt. Damit auch in bash, zsh oder auch dash. Dein Fehler ist, dass du nicht richtig gelesen hast. $(...) macht nmlich etwas ganz anderes als ${...}. Gruss, Frank Dafr hast Du um so genauer gelesen. Shit, das war ein blder Vertipper und erst auf dem fnften Blick die geschweifte Klammer auszumachen. So gehts. Alles klar, ich habe dazugelernt. DANKE!
Re: Dateinamen kürzen
Andreas Pakulat wrote: Noch besser als for i in *.done oder for i in $(ls *.done) ist ls *.done | while read f ; do ... ; done gerade wenns sehr viele Dateien sind, denn dann ist die Argumentliste zu lang und man landet auf der Nase... $(ls *.done) faellt ausserdem auch auf die Nase, wenn Leerzeichen oder Newslines in den Dateinamen vorkommen. Bei ls *.done | while wird die Argumentliste genauso zu lang. Wenn, dann muss man da find benutzen. Ausserdem interpretiert read die Eingabe, hoert ein Dateiname zum beispiel mit einem backslash auf, empfiehlt es sich read -r zu verwenden. (Zugegeben, in diesem Fall kommt das nicht vor). Hinzukommt, dass ls | while read auch nicht geht, wenn der Dateiname mit Leerzeichen anfaengt, das umgeht man mit ls | while IFS= read -r. Der Haken der Jetzt noch uebrig bleibt, ist, wenn Newlines in einem Dateinamen vorkommen. Da fallen mir nur extrem haessliche Loesungen fuer ein. Deshalb nimmt einfach die zsh: ;) autoload -U zmv zmv '(*).done' '$1' -DaTa -- If you want to program in C, program in C. It's a nice language. I use it occasionally... :-) -- Larry Wall in [EMAIL PROTECTED] -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Frank Terbeck wrote: Wozu einen externes Programm, wenn das mit shellinternen Mitteln problemlos zu lösen ist? Habe basename vor Jahr und Tag aus einem Unix Buch gelernt. ${file%.done} Das gibt bei mir nur eine Fehlermeldung: $ touch was.done; echo ${was.done%.done} bash: ${was.done%.done}: bad substitution Offensichtlich habe ich da was flashc verstanden :-| ---(kaimartin)--- -- Kai-Martin Knaak http://lilalaser.de/blog -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
kai-martin knaak wrote: Das gibt bei mir nur eine Fehlermeldung: $ touch was.done; echo ${was.done%.done} bash: ${was.done%.done}: bad substitution Ja. file=was.done echo ${file%.done} -DaTa -- If you consistently take an antagonistic approach, however, people are going to start thinking you're from New York. :-) -- Larry Wall to Dan Bernstein in [EMAIL PROTECTED] -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Andreas Pakulat [EMAIL PROTECTED]: [...] Noch besser als for i in *.done oder for i in $(ls *.done) ist ls *.done | while read f ; do ... ; done gerade wenns sehr viele Dateien sind, denn dann ist die Argumentliste zu lang und man landet auf der Nase... Also, an dieser Stelle kann das überhaupt nicht besser funktionieren als *.done, weil du die Dateiliste so genauso gut komplett an ls übergibts. Im übrigen sollte jede Shell mit sehr langen Listen in for Schleifen klarkommen. Deswegen kann man ja gerade dieses Argumentlimit für Programme mit for Schleifen umgehen. Hier wird schliesslich keine Argumentliste an ein externes Programm übergeben. Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
Danijel Tasov [EMAIL PROTECTED]: [...] Hinzukommt, dass ls | while read auch nicht geht, wenn der Dateiname mit Leerzeichen anfaengt, das umgeht man mit ls | while IFS= read -r. Der Haken der Jetzt noch uebrig bleibt, ist, wenn Newlines in einem Dateinamen vorkommen. Da fallen mir nur extrem haessliche Loesungen fuer ein. Deshalb nimmt einfach die zsh: ;) autoload -U zmv zmv '(*).done' '$1' Ja, alles richtig. 'zmv' löst das auch mit for-schleifen. Daher kann man eine einfache for Schleife in jeder Shell benutzen. Die zsh könnte das auch noch so: for i in *.done;do mv $i ${i:r};done Nur der Vollständigkeit halber. :-) Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Dateinamen kürzen
kai-martin knaak [EMAIL PROTECTED]: Frank Terbeck wrote: ${file%.done} Das gibt bei mir nur eine Fehlermeldung: $ touch was.done; echo ${was.done%.done} bash: ${was.done%.done}: bad substitution Offensichtlich habe ich da was flashc verstanden :-| Ja. :) Den Grund hat ja schon jemand anders genannt. Wenn man solche Stringänderungen an festen Strings vornehmen möchte, dann könnte man das in der zsh folgendermassen machen: [snip] zsh% echo ${${:-test001.tar.gz.done}%.done} test001.tar.gz [snap] Ich frage mich aber warum man sowas machen wollen würde. ;) Nebenbei sind solche nested Expansions nicht standardisiert und funktionieren längst nicht überall. Also sollte man das in portablen Skripten garnicht erst versuchen. Gruss, Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)