Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Überreste von Dateien mit alter Codepage

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
viper79
Newbie
Newbie
Beiträge: 2
Registriert: 17. Mär 2005, 10:47

Überreste von Dateien mit alter Codepage

Beitrag von viper79 »

Hallo!

Ich habe folgendes Problem:
Seit einiger Zeit arbeite ich bei einer Firma und betreue dort die EDV. Auf dem File-Server läuft Suse 8.2. Vor ungefähr zwo Jahren wurde wohl ein Update des Samba-Servers durchgeführt. Dabei wurde auch der character-set von ? auf iso8859-15 geändert. Auf jeden Fall konnte ab dem Zeitpunkt nicht mehr von Windows aus auf Dateien zugegriffen werden, die Umlaute wie ÖÄÜ usw. enthalten. In der Shell werden dies mit einem ? antatt des Umlautes angezeigt. Es hat sich dann wohl jemand die Mühe gemacht die wichtigsten Dateien per Hand umzubenennen :twisted: . Jetzt habe ich das Problem von alten Dateileichen die nun noch auf dem Server sind.

Beispiel:

drwxrws--- 11 root ab2ha 496 Oct 26 18:40 ./
drwxrws--- 5 root ab2ha 144 Mar 28 2003 ../
-rwxrw---- 1 admin ab2ha 39129 May 22 2002 Fragenkatalog AB2-Gesamt-WS 2002.pdf*
-rwxrw---- 1 claudia ab2ha 30262 Mar 10 2004 Fragenkatalog AB2-Gesamt-WS0304.pdf*
-rwxrw---- 1 admin ab2ha 455680 Sep 18 2001 Fragenkatalog AB2-Gesamt.doc*
-rwxrw---- 1 admin ab2ha 34296 Jan 15 2002 Fragenkatalog AB2-Gesamt.pdf*
drwxrws--- 2 root ab2ha 96 Feb 11 2003 Fr?hjahr 2003/
drwxrws--- 2 admin ab2ha 264 Nov 13 2003 Frühjahr 2003/

Hier wird das Verzeichniss "Frühjahr 2003" doppelt angezeigt.

Meine Frage: Gibt es eine Möglichkeit die alten Dateien (die mit dem ?) zu erkennen und zu löschen ohne dass die neuen Dateien mit demselben Namen auch gelöscht werden?

Das ganze Problem ist vielleicht zu kompliziert beschrieben aber ich hoffe das eigentliche problem ist klar geworden.
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

Ersteinmal würde ich mit "ls -b" nachsehen, was für Zeichen in den nicht darstellbaren Namen wirklich enthalten sind. Diese Zeichen werden dann in der Form "\376" dargestellt.

Danach kann man dann mit find weiter machen. Etwa wie folgt:

Code: Alles auswählen

find /verzeichnis -name \*$'\376'\*
Die Trefferliste würde ich kontrollieren und erst dann einen "-exec" anhängen. Am Ende würde der Befehl dann so aussehen:

Code: Alles auswählen

find /verzeichnis -name \*$'\376'\* -exec rm {} \;
Die 376 musst du natürlich durch eines deiner Problem-Zeichen ersetzten. Für ein anderes Zeichen das ganze dann wiederholen...
viper79
Newbie
Newbie
Beiträge: 2
Registriert: 17. Mär 2005, 10:47

Beitrag von viper79 »

Danke für den super tip!

Kannst Du mir vielleicht die genau Funktionsweise von den Parametern des find Befehls erklären?
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

Kannst Du mir vielleicht die genau Funktionsweise von den Parametern des find Befehls erklären?
In diesem Fall wurden eigentlich nur zwei Parameter verwendet:

-name
Auf diesen parameter folgt das Suchmuster. Wichtig ist, hierbei * und ? mit einem Backslash zu entwerten. Sonst kann es sein, dass nicht alle Dateien gefunden werden.
-exec
Auf -exec folgt der Befehl, der für jede gefundene Datei ausgeführt werden soll. Hier wird die aktuelle Datei durch die Zeichen "{}" symbolisiert. Der Befehl wird mit einem "\;" abgeschlossen.

Ansonsten ist $'\376' eine Maskierung für das Zeichen octal 376 im Ascii-Code. Das ist eine Feature der Shell (bash), und lässt sich auch bei ls und anderen Befehlen anwenden.
$'\101' wäre zum Beispiel ein "A". Man kann aber auch die Hexadezimale Notierung verwenden. Zum Beispiel $'\x41' für ein großes "A".

Der find-Befehl kann noch viel mehr (Dateien älter als x Tage finden usw.). Siehe hierzu

Code: Alles auswählen

man find
Antworten