c-i-k-o Geschrieben 6. Oktober 2015 Teilen Geschrieben 6. Oktober 2015 Hallo Zusammen,als Neuling in der Linuxumgebung habe ich folgendes Problem:Wir sind gerade dabei unser Fileshare von einem Linux OS in ein Win OS umzuziehen. Jetzt meckert die Windowsumgebung, wenn im Ordnernamen Punkte vorkommen. Diese kommen aber fast in jedem Ordnernamen vor. Bsp. www.bla.de/bla_bl.de/bla.bla.com ... usw. Die Ordnernamen einzeln händisch umzubenennen wäre IT zu Fuß und so ziemlich aufwendig. Jetzt habe ich versucht ein Script zu schreiben, komme aber nicht wirklich weiter.Mein Skript sieht wie folgt aus:#!/bin/bash for i in ` find . -type d -name "*.*"` # finde alle ordner die einen Punkt im Namen haben do echo $i # gebe ordnernamen aus sed -e 's/'.'/''/g' # und ersetze im Ordnernamen $i Punkt durch Leerzeichen # ich habe an dieser stelle auch diese Zeile versucht: ${i /.//} - klappt aber auch nicht done mein Ansatz ist: ich will die Ordnernamen in eine Stringvariable schreiben und diesen mittels der Variable umbennen, indem ich die Zeichen ersetze. Ich habe natürlich schon im Forum gesucht und natürlich auch schon gegoogelt, leider komme ich nicht weiter. Freue mich schon auf eure Hilfe. Besten Dank im Voraus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 6. Oktober 2015 Teilen Geschrieben 6. Oktober 2015 (bearbeitet) Hi,du musst die Ausgabe an den sed Befehl weiterleiten (pipen):echo $i | sed -e 's/\./ /g' Und Dinge wie einen "." musst du immer escapen (mit dem Backslash). Bearbeitet 6. Oktober 2015 von carstenj Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
c-i-k-o Geschrieben 7. Oktober 2015 Autor Teilen Geschrieben 7. Oktober 2015 (bearbeitet) Hi, danke carstenj.ich habe es jetzt versucht wie du es vorgeschlagen hast.sieht jetzt so aus#!/bin/bash for i in ` find . -type d -name "*.*"` do echo $i | sed -e 's/\./ /g' doneaber irgendwie will es trotzdem nicht. die Punkte werden zwar ersetzt durch Leerzeichen und ausgegeben aber gespeichert wird das ganze nicht :/ Bearbeitet 7. Oktober 2015 von c-i-k-o Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 7. Oktober 2015 Teilen Geschrieben 7. Oktober 2015 Tip Dazu. Keine Leerzeichen verwenden. Ersetze z.B. durch _ (Unterstrich) sonst hast du das Problem das deine Pfade immer in Anführungszeichen stehen müssen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
c-i-k-o Geschrieben 7. Oktober 2015 Autor Teilen Geschrieben 7. Oktober 2015 Tip Dazu. Keine Leerzeichen verwenden. Ersetze z.B. durch _ (Unterstrich) sonst hast du das Problem das deine Pfade immer in Anführungszeichen stehen müssen.danke für den Tipp, werde ich auf jeden mit aufnehmen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 7. Oktober 2015 Teilen Geschrieben 7. Oktober 2015 (bearbeitet) Hi,was genau soll denn passieren? Wenn du die Dateien tatsächlich umbenannt haben möchtest, musst du...Zuerst die neuen Name generieren (hast du getan)mit dem Kommando "mv" die alten Dateien umbennnen (aber das würde ich vorher intensiv testen, denn wenn du das im falschen Verzeichnis aufrufst und/oder die falschen Dateien erwischt, kann das böse enden)TIPP: Rufe "find" mit dem entsprechenden Verzeichnis auf (als Beispiel /var/www/html/):find /var/www/html/ -type d -name "*.*" Überhaupt würde ich davon abraten, einfach mal so Dateien umzubennen, es sei denn die werden ausschließlich von Windows benutzt (bzw. du weisst genau, dass das keine Auswirkungen auf das System hat!!!). Bearbeitet 7. Oktober 2015 von carstenj Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
c-i-k-o Geschrieben 7. Oktober 2015 Autor Teilen Geschrieben 7. Oktober 2015 (bearbeitet) so jetzt habe ich das Restultat des sed-Kommandos in eine Variable geschrieben:#!/bin/bash for i in ` find . -type d -name "*.*"` do new_dirname=$(echo "$i" | sed -e 's/\./_/g') mv $i $new_dirname done und kriege folgende Fehlermeldung:mv: Insufficient arguments (1)Usage: mv [-f] [-i] f1 f2 mv [-f] [-i] f1 ... fn d1 mv [-f] [-i] d1 d2mv: cannot rename .... to .... : No such file or directory Bearbeitet 7. Oktober 2015 von c-i-k-o Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 7. Oktober 2015 Teilen Geschrieben 7. Oktober 2015 (bearbeitet) Hi,das Problem ist, dass du nun Dateien findest wie z.B.: ./.blah findest und dann nach _/_blah umbennen möchtest. Das geht aber nicht, weil es kein Verzeichnis namens _ gibt. Daher nochmal als Hinweis: Statt find . nimm find /verzeichnis/xyz.....Aber nochmal: Überhaupt würde ich davon abraten, einfach mal so Dateien umzubennen, es sei denn die werden ausschließlich von Windows benutzt (bzw. du weisst genau, dass das keine Auswirkungen auf das System hat!!!). Und vorher ein Backup machen. Bearbeitet 7. Oktober 2015 von carstenj Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
c-i-k-o Geschrieben 7. Oktober 2015 Autor Teilen Geschrieben 7. Oktober 2015 Hi Carsten,genau das ist mir gerade auch eingefallen, leider nachdem ich schon so lange gezweifelt habe :/Es hat mit dem find /verzeichnis/xyz... geklappt. Danke für den Hinweis - ich muss sie abändern, weil das Windows-Share die Ordnernamen in der Form nicht akzeptiert. Die Dateien habe ich in diesem Fall nicht angefasst nur die Ordnernamen. Backup habe ich sicherheitshalber abgelegt. Besten Dank für deine Unterstützung Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.