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
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
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
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.
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):
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
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
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
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
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
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
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
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.
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
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
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
$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
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
.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
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?
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
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]
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
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
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,
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
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.
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
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
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
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
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
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
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
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
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}
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
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
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
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
40 matches
Mail list logo