[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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 <7577@jpl-devvax.JPL.NASA.GOV>



Reply to: