Zum Inhalt springen

Dateinamen mit Leerzeichen


Empfohlene Beiträge

Geschrieben

Hallo Zusammen,

 

ich stehe erneut einem Porblem bzgl. des Umzugs auf ein neues Share entgegen. 
Undzwar habe ich in sämtlichen Ordnern mit Unterordnern msg-dateien. Das Manko an der Sache ist, dass die msg-Dateien im Namen mehrere Leerzeichen haben - manchmal direkt zwei oder drei hintereinander. Die Dateinamen sind somit zu lang für das neue Share und führen zum Aufschlag einer Fehlermeldung.
Mein Ziel ist es jetzt die Leerzeichen aus dem Dateinamen zu entfernen und anschließend die Dateinamen so zu kürzen, dass nur die ersten 40 Zeichen und am ende .msg bestehen bleibt.

Dazu habe ich folgendes Skript geschrieben (vorerst nur um die Leerzeichen zu entfernen, denn daran scheitert es schon :/ ):

 

#!/bin/bash

for i in `find Ordner/ -type f -name "*.msg"`
do
   NEWNAME=`echo "$i" | sed "s/ //g"`
   mv $i $NEWNAME
done

Leider wird jedes Wort nach einem Leerzeichen in die Variable i gepackt, sodass nicht der ganze Dateinamen in i zwischengespeichert wird, sondern die einzelnen Wörter.
Daraus folgt folgende Fehlermeldung:

mv: cannot access Verzeichnis/Unterverzeichnis/Unterverzeichnis/Dies
mv: cannot access ist
mv: cannot access eine
mv: cannot access Mail

mv: Insufficient arguments (1)
Usage: mv [-f] [-i] f1 f2
       mv [-f] [-i] f1 ... fn d1
       mv [-f] [-i] d1 d2,

Ich ale Neuling, kann die Ursache nicht finden und hoffe auf eure Unterstützung.

 

Geschrieben

 

#!/bin/bash

for i in `find Ordner/ -type f -name "*.msg"`
do
   NEWNAME=`echo "$i" | sed "s/ //g"`
   mv $i $NEWNAME
done

 

Versuch mal folgendes zu benutzen:

#!/bin/bash

for file in $(find Ordner/ -type f -name "*.msg")
 #1
do
   path=$(dirname "$file") #2
   NEWNAME=$(basename "$file" | sed "s/ //g") #3
   echo $NEWNAME #4
   #mv $path/"$file" $path/$NEWNAME #5
done

#1: Variable i wurde in file umbenannt. Damit weißt du was gemeint ist
#2: Wir speichern uns den Pfad der Datei in eine Variable path. Denn wir wollen nur Dateien und nicht Ordner umbennen
#3: Wir passen nur die Datei im Pfad an.
#4: Testausgabe, man sollte immer erst prüfen, ob mein skript macht was es soll, bevor ich anfange Befehle wie mv, rm, etc zu verwenden.
#5: Die Ausführung wurde wegen #4 auskommentiert. Das Verschieben wurde mittels vorrangestelltem Pfad erweitert. Außerdem wurde die Variable $file mit "" versehen, aufgrund der Leerzeichen.

Anmerkung:
Die `befehl` wurden durch die Standard POSIX-Syntax ersetzt: $(befehl)

Nachschlagebefehle:

Du kannst auf http://ss64.com/bash/ die Befehle dirname und basename einmal nachschlagen.

Geschrieben

Hallo feuerjinn,

danke für deine Hilfe. Ich habe soeben deinen Code kopiert und ausgeführt.

Die Ausgabe:

FW
Dies
ist
-
eine
Mail
-
Beispiel
-.msg

ich kann nicht nachvollziehen, warum er den Dateinamen als solches in mehrere Strings trennt

 

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...