ubuntuusers.de

bash script umbenennen und verschieben??

Status: Ungelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

LudwigII

Anmeldungsdatum:
11. September 2016

Beiträge: Zähle...

Hallo ich habe ein kleines Scrip mit dem ich alle Datein in einen Ordner umbennen kann, leider kommen nach einer Zeit auch die Datein die ich schon umbenannt habe wieder drann, hatte mir gedacht das ich die Datei nach dem umbennen einfach in ein anderen Ordner verschiebe, leider bekomme ich immer die Meldung

mv: cannot move 'datei.mp4' to '/umbenannt/': Not a directory

ansonsten vieleicht eine if abfrage vor der schleife ? Aber nach welchen Indikator kann ich das aufbauen ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11

#!/bin/bash
for FILE in *.mp4; do
        echo "Neuen Namen fuer" $FILE "eingeben:"
        read NAME
        mv "$FILE" "$NAME.${FILE##*.}"
        mv "$FILE" /umbenannt/
        echo "Datei" $FILE "wurde in" $NAME.${FILE##*.} "umbenannt"

done

Thomas_Do Team-Icon

Moderator
Avatar von Thomas_Do

Anmeldungsdatum:
24. November 2009

Beiträge: 8808

mv "$FILE" umbenannt/

LudwigII

(Themenstarter)

Anmeldungsdatum:
11. September 2016

Beiträge: 11

Ändert leider nix

rolapp

Anmeldungsdatum:
3. Januar 2014

Beiträge: 117

Wohnort: Erlensee

Existiert das Verzeichnis ?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

Liegt umbenannt im aktuellen oder im Wurzelverzeichnis (oder in beiden oder in keinem)?

1
2
3

        mv "$FILE" "$NAME.${FILE##*.}"
        mv "$FILE" /umbenannt/

Wieso sollte $FILE nach dem ersten mv noch da sein? Die Fehlermeldung moniert etwas anderes, aber dennoch drängt sich mir diese Frage auf.

LudwigII

(Themenstarter)

Anmeldungsdatum:
11. September 2016

Beiträge: 11

Ja umbenannt liegt im selben verzeichniss

aber wie gesagt eine if abfrage währe auch ganz schon hab das ganze jetzt mal so versucht leider ohnen erfolg

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15

#!/bin/bash

GESUCHT = "InjederUmbenanntenDatei"
for FILE in *.mp4; do
    if [ -z "${FILE%%*${GESUCHT}*}" ]
then
        echo "Neuen Namen fuer" $FILE "eingeben:"
        read NAME
        mv "$FILE" "$NAME.${FILE##*.}"
        echo "Datei" $FILE "wurde in" $NAME.${FILE##*.} "umbenannt"
else
        echo Keine Datein zum umbennen vorhanden
fi
done

leider ohne erfolg

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

Und das zweite mv wurde stillschweigend geopfert? Damit wir es nicht zu einfach haben?

LudwigII

(Themenstarter)

Anmeldungsdatum:
11. September 2016

Beiträge: 11

das wird ja dann nicht benötigt wenn die if abfrage funktonier oder ?

rolapp

Anmeldungsdatum:
3. Januar 2014

Beiträge: 117

Wohnort: Erlensee

1
2
 mv "$FILE" "$NAME.${FILE##*.}"
 mv "$FILE" /umbenannt/

in 1. benennst Du die Datei um
in 2. versuchst du die Datei zu verschieben die existiert aber nicht mehr da in 1. umbenannt

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Gibt es das Verzeichnis /umbenannt/ tatsächlich ? - das müsste nämlich im Wurzelverzeichnis liegen, und das wäre doch sehr ungewöhnlich !

Im Übrigen "quotest" Du bei Deinen echo - Zeilen (Z. 4 / 8) genau die Teile. die man nicht "quoten" muss (denn Dein wörtlicher Text ist einfach wie er ist),
und lässt das ungequotet, was man "quoten" sollte (denn die expandierte Variable kann sehr wohl Überraschungen mitbringen !).
→ bitte lies Dir unbedingt nochmal das Kapitel über das "Quoting" durch !

LG,

track

LudwigII

(Themenstarter)

Anmeldungsdatum:
11. September 2016

Beiträge: 11

also musss ich den ganzen Pfad angeben /var/www/html/upolad/Ordner1/umbenannt ?? aber egal wie gesagt das mit einer IF abfrage zu machen würde ich dann doch vorziehen fragt sich nur wo ich das ganze einbaue damit das funktionirert so erhalte ich die Meldung Unbekannter befhel in zeile 3

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
GESUCHT = "InjederUmbenanntenDatei"
for FILE in *.mp4; do
    if [ -z "${FILE%%*${GESUCHT}*}" ]
then
        echo "Neuen Namen fuer" $FILE "eingeben:"
        read NAME
        mv "$FILE" "$NAME.${FILE##*.}"
        echo "Datei" $FILE "wurde in" $NAME.${FILE##*.} "umbenannt"
else
        echo Keine Datein zum umbennen vorhanden
fi
done

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Es gibt keinen Grund, der gegen einen relativen Pfad spräche !

Du hattest allerdings mit /umbenannt/ sehr wohl einen absoluten Pfad angegeben ! - womöglich, ohne das Du Dir dessen bewusst warst.

Lies Dir bitte die Sache mit dem relativen und absoluten Pfad unbedingt noch einmal genau durch.

LG,

track

p.s.: Und das mit dem "Quoting" ist immer noch so chaotisch ... bitte guck Dir auch noch einmal meinen letzten Post dazu an.
Wenn Du dabei Sachen unklar bleiben, dann frag bitte nach !

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

LudwigII schrieb:

1
GESUCHT = "InjederUmbenanntenDatei"

Die Zuweisung ist übrigens falsch. Anders als in fast allen anderen Programmiersprachen sind Leerzeichen um das Gleich relevant - im Sinne von verheerend.

1
GESUCHT="InjederUmbenanntenDatei"

Ist schlechter lesbar, aber die Coder haben selten Ahnung von Ergonomie und in den Urzeiten der Ursuppen war auch jedes einsparbare Byte Sekunden wert, 80 Bytes eine ganze Seite Lochstreifen o.s.ä.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

Wie rufst Du Dein Programm eigentlich auf? Ich habe mit dem LC_ALL=C die Meldungen auf Englisch umgeschaltet, die bei mir auf Deutsch kommen, da Du eine englische Fehlermeldung reportet hast (1. Posting):

mv: cannot move 'datei.mp4' to '/umbenannt/': Not a directory

1
2
3
4
5
LC_ALL=C ./mp4mv.sh 
Neuen Namen fuer 2a.mp4 eingeben:
a
mv: cannot stat '2a.mp4': No such file or directory
Datei 2a.mp4 wurde in a.mp4 umbenannt

Wie Du siehst kommt bei mir eine gänzlich andere Meldung, die auch zu den zwei mv-Kommandos passt: No such file or directory.

Fehlermeldungen darf man nicht frei wiedergeben, weil es auf den Wortlaut ankommt, und weil immer wieder Übertragungsfehler passieren sollte man sie auch nicht abtippen, sondern sklavisch kopieren.

Mich wundert also vielerlei. Wie rufst Du das Skript auf? Welche Shell benutzt Du? Weißt Du was ein shebang ist? Wieso ist Deine Sprache nicht auf Deutsch eingestellt? Von mir aus nutz einen Rasperry-Pi mit Debian Grotty, aber versteck keine Informationen, das behindert die Hilfe.

also musss ich den ganzen Pfad angeben /var/www/html/upolad/Ordner1/umbenannt ?

Wenn Du in /var/www/html/upolad/Ordner1 bist, dann kannst Du auch umbenannt angeben, Du musst nur dann da sein - was aber für "for file in *.mp4" ohnehin der Fall sein dürfte.

Der Slash ist aber nicht Teil des Namens sondern ein Trenner zwischen Namen, ein führender Slash steht für das Wurzelverzeichnis.

Der Unterordner heißt folglich nicht umbenannt/ oder /umbenannt/ oder /umbenannt sondern umbenannt, wobei die erste Version schadlos ist.

Antworten |