ubuntuusers.de

Problem mit mv Befehl in Shell-Script

Status: Gelöst | Ubuntu-Version: Server 9.04 (Jaunty Jackalope)
Antworten |

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

Avatar von 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 Team-Icon

Avatar von 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

Avatar von 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 Team-Icon

Avatar von 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

Avatar von 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 Team-Icon

Avatar von 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 Team-Icon

Avatar von 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 Team-Icon

Avatar von 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:

1
2
3
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

Antworten |