Mahlzeit,
stehe auf dem Schlauch: ich habe für eine Datensicherung bisher eine Datei umbenannt:
mv dateiname.sql dateiname\_`date +%F_%H_%M`.sql
Jetzt gibt es aber mehrere dieser Dateien, alle durchnumeriert: dateiname00.sql, dateiname01.sql, dateiname03.sql… Ich kam also auf die glorreiche Idee, das so zu machen:
mv dateiname??.sql dateiname??\_`date +%F_%H_%M`.sql
Leider klappt das nicht: das Ziel muß ein Verzeichnis sein, wenn man mehrere Dateien als Quelle hat.
Geht das irgendwo mit find? Und wenn ja: wie?
Gruß
Sancho
Mahlzeit,
stehe auf dem Schlauch: ich habe für eine Datensicherung
bisher eine Datei umbenannt:
mv dateiname.sql
dateiname_date +%F_%H_%M.sql
Jetzt gibt es aber mehrere
dieser Dateien, alle durchnumeriert: dateiname00.sql,
dateiname01.sql, dateiname03.sql… Ich kam also auf die
glorreiche Idee, das so zu machen:
mv dateiname??.sql
dateiname??_date +%F_%H_%M.sql
Leider klappt das nicht:
das Ziel muß ein Verzeichnis sein, wenn man mehrere Dateien
als Quelle hat.
Bau Dir doch einfach ne for-Schleife, die die Dateien einzeln durchgeht.
Gruß,
Malte.
Hallo,
probiers mal mit
rename -n 'my $date=`date +%F_%H_%M`;chomp $date;/f(\d\d)\.sql/; $\_ = "\_f$1\_$date.sql;' f\*.sql
wobei f für den ersten Teil deines Dateinamens (vor den Nummern) steht.
Grüße,
Moritz
Mahlzeit,
stehe auf dem Schlauch: ich habe für eine Datensicherung
bisher eine Datei umbenannt:
mv dateiname.sql
dateiname_date +%F_%H_%M.sql
Jetzt gibt es aber mehrere
dieser Dateien, alle durchnumeriert: dateiname00.sql,
dateiname01.sql, dateiname03.sql… Ich kam also auf die
glorreiche Idee, das so zu machen:
mv dateiname??.sql
dateiname??_date +%F_%H_%M.sql
Leider klappt das nicht:
das Ziel muß ein Verzeichnis sein, wenn man mehrere Dateien
als Quelle hat.
Geht das irgendwo mit find? Und wenn ja: wie?
Gruß
Tach,
wie Malte schon schrieb, ne Schleife wäre am einfachsten. Zur Not auch mit find:
find . -name dateiname??.sql |
xargs -n 1 -I {} mv {} {}.$(date +"%Y%m%d%H%M")
(das generiert dann allerdings Dateinamen der Form dateiname??.sql. - ausserdem emuliert xargs -n 1 ja sowas wie eine Schleife)
Mit Schleife siehts dann auch noch schoener aus:
for fname in $(find . -type f -name dateiname??.sql)
do
mv $fname ${fname%??.sql}\_$(date +"%Y%m%d%H%M).sql
done
gruss
bernhard
Hi Malte,
Bau Dir doch einfach ne for-Schleife, die die Dateien einzeln
durchgeht.
gute Idee, bloß bekomme ich dann statt „dateiname01_Datum.sql“ den nicht brauchbaren „dateiname01.sql_Datum.sql“. Wie parse ich den Dateinamen ohne Extension daraus?
Gruß
Sancho
Hi,
probiers mal mit
rename -n ‚my $date=date +%F_%H_%M;chomp
date;/f(\d\d).sql/; $_ = "_f$1_$date.sql;‘ f*.sql
wobei f für den ersten Teil deines Dateinamens (vor den
Nummern) steht.
Welches f? Bin fast blond 
Im Ernst: die Shell gibt zwar keine Meldung raus, tut aber auch nichts 
Meine Zeile sah so aus:
rename -n 'my $date=`date +%F_%H_%M`;chomp $date;/dateiname(\d\d)\.sql/; $\_ = "\_dateiname$1\_$date.sql;' dateiname\*.sql
Was mache ich falsch?
Gruß
Sancho
Geht das irgendwo mit find? Und wenn ja: wie?
wie Malte schon schrieb, ne Schleife wäre am einfachsten. Zur
Not auch mit find:
(das generiert dann allerdings Dateinamen der Form
dateiname??.sql. - ausserdem emuliert xargs -n 1
ja sowas wie eine Schleife)
ja, die Schleife wär mir egal, aber das Ergebnis ist nicht das, was ich möchte 
Gibt es nicht sowas wie bei Windows?
%~I - Expandiert %I und entfernt alle umschließenden
Anführungszeichen (").
%~fI - Expandiert %I zu einem vollständigen Dateinamen.
%~dI - Erzeugt nur den Laufwerkbuchstaben von %I.
%~pI - Erzeugt nur den Pfad von %I.
%~nI - Erzeugt nur den Dateinamen von %I.
%~xI - Erzeugt nur die Dateierweiterung von %I.
%~sI - Erzeugter Pfad enthält nur kurze Dateinamen.
%~aI - Erzeugt die Dateiattribute von %I.
%~tI - Erzeugt Datum und Zeit von %I.
%~zI - Erzeugt die Dateigröße von %I.
Gruß
Sancho
Hallo allerseits,
habs dann doch mit der Schleife hingekriegt:
for i in dateiname??.sql; do mv $i ${i%.sql}\_`date +F_%H_%M`.sql; done
Danke an alle!
Gruß
Sancho
Hallo,
Welches f? Bin fast blond 
alle 'f’s, die drin vorkommen (zwei Stück sinds)
Im Ernst: die Shell gibt zwar keine Meldung raus, tut aber
auch nichts 
rename mit -n sollte ausgeben, welche Dateien es umbenennt, ohne es zu tun. Ohne -n tut es das tatsächlich.
Meine Zeile sah so aus:
rename -n ‚my $date=date +%F\_%H\_%M;chomp $date;/dateiname(\d\d).sql/; $_ =
"_dateiname$1_$date.sql;‘ dateiname*.sql
Na dann hast du ja alles 'f’s durch den Dateinmaen ersetzt.
Was mache ich falsch?
Vielleicht verwendest du das falsche rename. Bei mir sieht
head `which rename`
so aus:
#!/usr/bin/perl -w
#
# This script was developed by Robin Barker ([email protected]),
# from Larry Wall's original script eg/rename from the perl source.
#
# This script is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.
#
# Larry(?)'s RCS header:
# RCSfile: rename,v Revision: 4.1 Date: 92/08/07 17:20:30
Aber das ist vielleicht Distributionsabhängig. Iirc hatte ich vor ca. 2 Jahren mal ein Mandrake, dessen rename ganz anders funktioniert hat…
Grüße,
Moritz
Gibt es nicht sowas wie bei Windows?
%~I - Expandiert %I und entfernt alle
umschließenden
Anführungszeichen (").
%~fI - Expandiert %I zu einem vollständigen
Dateinamen.
%~dI - Erzeugt nur den Laufwerkbuchstaben von %I.
%~pI - Erzeugt nur den Pfad von %I.
%~nI - Erzeugt nur den Dateinamen von %I.
%~xI - Erzeugt nur die Dateierweiterung von %I.
%~sI - Erzeugter Pfad enthält nur kurze Dateinamen.
%~aI - Erzeugt die Dateiattribute von %I.
%~tI - Erzeugt Datum und Zeit von %I.
%~zI - Erzeugt die Dateigröße von %I.
Tach Sancho,
wie geht denn sowas? Und vor allen Dingen: wo findet man solche Infos?? (ab und zu braucht man ja auch unter Windoofs man ne Commandline, da kämen diese Erweiterungen ganz gut…).
Ich kann mir vorstellen, was du meinst - such mal unter String-Operations in der ksh/bash manpage (wenigstens die DateiNAMENSmanipulationen sollten sich damit machen lassen…)
gruss
bernhard
gute Idee, bloß bekomme ich dann statt „dateiname01_Datum.sql“
den nicht brauchbaren „dateiname01.sql_Datum.sql“. Wie parse
ich den Dateinamen ohne Extension daraus?
Hi Sancho,
siehe meine weiter Antwort oben.
fname=filename\_xyz.sql
fname\_ohne\_ext=${fname%.\*}
echo $fname\_ohne\_ext
gruss
bernhard
Mahlzeit,
wie geht denn sowas?
Zum Beispiel so:
C:\Texte\Sancho\>for %i in (\*.txt) do echo Laufwerk: %~di Pfad: %~pi Dateiname: %~ni Erweiterung: %~xi
C:\Texte\Sancho\>echo Laufwerk: C: Pfad: \Texte\Sancho\ Dateiname: drucker Erweiterung: .txt
Laufwerk: C: Pfad: \Texte\Sancho\ Dateiname: drucker Erweiterung: .txt
C:\Texte\Sancho\>echo Laufwerk: C: Pfad: \Texte\Sancho\ Dateiname: efo~1 Er weiterung: .txt
Laufwerk: C: Pfad: \Texte\Sancho\ Dateiname: efo~1 Erweiterung: .txt
C:\Texte\Sancho\>echo Laufwerk: C: Pfad: \Texte\Sancho\ Dateiname: NoName02 Erweiterung: .txt
Laufwerk: C: Pfad: \Texte\Sancho\ Dateiname: NoName02 Erweiterung: .txt
C:\Texte\Sancho\>echo Laufwerk: C: Pfad: \Texte\Sancho\ Dateiname: NoName03 Erweiterung: .txt
Laufwerk: C: Pfad: \Texte\Sancho\ Dateiname: NoName03 Erweiterung: .txt
C:\Texte\Sancho\>
Und vor allen Dingen: wo findet man solche Infos??
Gib in der Kommandozeile einfach for /? ein! Ansonsten im Index der Windows-Hilfe unter Befehlsreferenz schauen, da sind alle Kommandos aufgelistet.
Das Ganze geht übrigens erst ab Windows 2000.
Ich kann mir vorstellen, was du meinst - such mal unter
String-Operations in der ksh/bash manpage (wenigstens die
DateiNAMENSmanipulationen sollten sich damit machen lassen…)
Alles klar, hab ich gefunden!
Gruß
Sancho