Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

 

 

#!/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.

  • Autor

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.