michi1980
Anmeldungsdatum: 21. März 2008
Beiträge: Zähle...
|
Hallo, versuche mit einem Shell-Script Mail die über Fetchmail reingehen, in ein leslicheres Format zu bringen,mit Datum zu verknüpfen und in einen anderen Ordner zu verschieben.
Leider erkennt der mv-Befehl die Dateien, die über ls eingelesen werden nicht mehr.
"mv: cannot stat ..... No Such File or directory" Fehlermeldung: mv: cannot stat `1266102276.Vfc00I21411M937909.ubuntu01.test.com': No such file or directory
mv: cannot stat `1266102277.Vfc00I21412M293525.ubuntu01.test.com': No such file or directory Script: #!/bin/bash -verbose
mailverz=`ls /home/tester1/mails/new`
count=1
for i in $mailverz; do mv $i /home/mails/`date +%x`Mail$count; ((count=count+1));done Kann mir jemand einen Tip geben?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17605
Wohnort: Berlin
|
Useless use of ls.
touch a "b b" ccc
for f in $(ls *) ; do echo $f ; done
a
b
b
ccc
for f in * ; do echo $f ; done
a
b b
ccc Das ist aber wohl nicht das Problem. new ist ein Verzeichnis in mails? mv sucht dann die Dateien im aktuellen Verzeichnis, nicht im mails-Verzeichnis, solange Du nicht zufällig oder absichtlich darinnen bist. Außerdem sind backticks veraltet:
`date +%x`
# nimm lieber:
$(date +%x)
|
Lux
Anmeldungsdatum: 10. November 2005
Beiträge: 5152
Wohnort: Grüt (Gossau ZH), Schweiz
|
user unknown schrieb: Useless use of ls.
touch a "b b" ccc
for f in $(ls *) ; do echo $f ; done
Useless use of $(ls *) da reicht auch einfach ein *.
for f in * ; do echo "$f" ; done Zur Lösung des Problems: Wenn Dateinamen Leerzeichen enthalten könnten, ist es immer eine gute Idee, den Dateinamen in Anführungszeichen zu setzen. #!/bin/bash -verbose
count=1
for i in /home/tester1/mails/new/*
do
mv "${i}" /home/mails/`date +%x`Mail${count}
((count=count+1))
done Gruss Dirk
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17605
Wohnort: Berlin
|
Lux schrieb: Wenn Dateinamen Leerzeichen enthalten könnten, ist es immer eine gute Idee, den Dateinamen in Anführungszeichen zu setzen.
Nein, nicht immer. Bei echo $f ist es überflüssig. Außer man will es sich einfach nur angewöhnen, dann hätte es auch bei einem echo-Kommando Sinn.
|
Lux
Anmeldungsdatum: 10. November 2005
Beiträge: 5152
Wohnort: Grüt (Gossau ZH), Schweiz
|
user unknown schrieb: Nein, nicht immer. Bei echo $f ist es überflüssig. Außer man will es sich einfach nur angewöhnen, dann hätte es auch bei einem echo-Kommando Sinn.
Yip, also immer 😬 Gruss Dirk
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17605
Wohnort: Berlin
|
Lux schrieb: user unknown schrieb: Nein, nicht immer. Bei echo $f ist es überflüssig. Außer man will es sich einfach nur angewöhnen, dann hätte es auch bei einem echo-Kommando Sinn.
Yip, also immer 😬
☺ Nein, nein. Wenn man sich das nicht angewöhnen will (Sehnenscheidenentzündung droht vom vielen Tippen) dann nicht - also nicht immer. immer oft gelegentlich selten nie
Immer und Nie sind Superlative. Entsprechend sparsam sind sie zu verwenden. Immer bedeutet ohne Ausnahme. Wenn man das nicht meint, sondern oft, dann sagt man einfach oft, oder von mir aus sehr oft, oder fast immer.
|
Lux
Anmeldungsdatum: 10. November 2005
Beiträge: 5152
Wohnort: Grüt (Gossau ZH), Schweiz
|
user unknown schrieb: Immer und Nie sind Superlative. Entsprechend sparsam sind sie zu verwenden. Immer bedeutet ohne Ausnahme. Wenn man das nicht meint, sondern oft, dann sagt man einfach oft, oder von mir aus sehr oft, oder fast immer.
Nein, ich meine schon ganz bewusst immer. Gruss Dirk
|
Hello_World
Anmeldungsdatum: 13. Juni 2006
Beiträge: 3620
|
Tja, es ist aber Unsinn, immer Anführungszeichen zu verwenden. Unter Umständen will man nämlich genau das erreichen, was durch das weglassen passiert, nämlich das zertrennen des betreffenden Strings an Wortgrenzen.
|
Lux
Anmeldungsdatum: 10. November 2005
Beiträge: 5152
Wohnort: Grüt (Gossau ZH), Schweiz
|
Hello World schrieb: Tja, es ist aber Unsinn, immer Anführungszeichen zu verwenden. Unter Umständen will man nämlich genau das erreichen, was durch das weglassen passiert, nämlich das zertrennen des betreffenden Strings an Wortgrenzen.
Das kann natürlich sein, ist mir persönlich aber noch nie passiert. Gruss Dirk
|
michi1980
(Themenstarter)
Anmeldungsdatum: 21. März 2008
Beiträge: 33
|
Vielen Dank ertsmal für die Antworten, hatte total übersehen, das ich den absoluten pfad ja nur im ls-Befehl und nicht im mv-Befehl gesetzt habe.
also muss ich schreiben mv /home/tester1/mails/new/$i ....
da ich das script defintiv nicht im gleichen verzeichnis starten will.
oder was bewirkt "${i}" genau - ist dort dann der dateiname mit absoluten pfad mitdrin?
und was ist der Unterschied zwischen $count und ${count} ?
|
Lux
Anmeldungsdatum: 10. November 2005
Beiträge: 5152
Wohnort: Grüt (Gossau ZH), Schweiz
|
michi1980 schrieb: hatte total übersehen, das ich den absoluten pfad ja nur im ls-Befehl und nicht im mv-Befehl gesetzt habe.
also muss ich schreiben mv /home/tester1/mails/new/$i ....
da ich das script defintiv nicht im gleichen verzeichnis starten will.
Das ist nicht nötig wenn Du "for i in /pfad/zur/datei/*" nutzt. Das sorgt dafür, dass der komplette Pfad enthalten ist.
oder was bewirkt "${i}" genau - ist dort dann der dateiname mit absoluten pfad mitdrin?
und was ist der Unterschied zwischen $count und ${count} ?
${i} und $i sind nahezu identisch, ausser, wenn Du beispielsweise Buchstaben anhängen willst. Mach mal: | i=habe
echo $in
echo ${i}n
|
Gruss Dirk
|
michi1980
(Themenstarter)
Anmeldungsdatum: 21. März 2008
Beiträge: 33
|
So habe getestet mit der Version mit den "{$i}" → funktioniert
trotzdem sind mir die geschweiften klammern noch nicht ganz klar, und warum $i in diesem fall dann denn kompletten pfad enthält.
|
michi1980
(Themenstarter)
Anmeldungsdatum: 21. März 2008
Beiträge: 33
|
sorry, hab übersehen das bereit geantwortet wurde –> danke
|