[linux-l] Dateinamen rekursiv umwandeln

Oliver Bandel oliver at first.in-berlin.de
Mi Mär 28 01:21:39 CEST 2007


Hallo,

das Problem habe ich in ähnlicher Weise mal gehabt und
hatte mir mal was gebaut.

Benutze ich hin und wieder mal.


On Tue, Mar 27, 2007 at 11:27:15PM +0200, Leander Sukov wrote:
> Hi,
> 
> auf einem alten Laptop sind Dateien mit Namen, die aus verschiedenen 
> Windowsgenerationen und von unterschiedlichen Linux-Distris stammen. 
> 
> Ich will das betreffende /home/ jetzt auf einem USB-Laufwerk sichern. Dabei 
> treten die beiden folgenden Probleme auf:
> 
> A.) Manche Namen sind für das Laufwerk (verhält sich windowsmäßig) doppelt 
> vorhanden (ichbineinedatei und Ichbineinedatei)

Das ist ein Problem, das ich mal zu lösen vor hatte,
aber es war nie dringend genug.... kenne das Problem
mit den case-insensitive Filesytems von OS-X.
Falls Du OS-X einsetzt... hmhhh... mach Dir irgendwo
auch eine Unix-FS-Partition, dann werden die
Files auch case-sensitive behandelt.


Das renamer-Tool verweigert dann jedenfalls für das jeweilige
File das Renaming, damit keine Files versehentlich gelöscht werden!

> 
> B.) Durch die verschiedenen Locale sind bei manchen Dateien die Namen 
> verhunzt. Die bekannten beiden hochkantstehenden Vierecke ...
> 
> Hat einer eine Idee, die das Homeverzeichnis rekursive durchsucht und alle 
> Dateien die nicht versteckt sind umwandelt,

Das rekursive/iterative kann man evtl. auch mit find erledigen.
Nur, was "find" denn aufrufen soll, also, ääääh.....

Ich habe mir mal ein "insubdirs-do" geschrieben, das genau das macht,
ohen daß man find  braucht...



> in dem es feststellt, dass die 
> buchstaben ABCDEFGHIJKLMNOPQRSTUVWXYZ in Kleinbuchstaben umgewandelt werden 
> sollen,


Genau das macht mein besagtes Tool.
Dafür braucht es aber ein FS, das case-sensitiv ist.

(Anmerkung: Allerdings liesse sich mit ein paar Zeilen
 mehr auch das Problem erledigen... also dann umzubenennen,
 wenn from_name und to_name bis auf den Case identisch sind
 und das to_name nicht bereits im FS existert (denn das würde
 man dann ja vernichten).
 Sind nur ein paar Zeilen (oder nur eine) und ich könnte das einbauen,
 und das wollte ich ja eh mal irgendwann machen.)


> alle Datein die doppelt sein würden eine Nummer bekommen 
> (ichbineinedatei_1.doc)

Das wollte ich immer mal implementieren, habe ich aber
immer wieder nur drüber nachgedacht und es (noch) nicht umgesetzt.
War aber eh mal geplant.
Wäre aber mehr als eine Zeile Code. Und heute Abend kann ich das
auch nicht mehr hin bekommen. Film geschaut und Wein getrunken.
Eigentlich müsste ich jetzt mal wieder nen Thread vom Zaune brechen ;-)
  *hihihih*



> und alle Zeichen, die nicht in dem Alphabet zwischen 
> A und Z vorkommen durch _ _ erstetzt werden?

Ja, genau auch das macht mein besagtes Tool.
(correct-names)


> Mir macht Probleme, eine Lösung 
> zu finden, die sozusagen nicht nach der Ersetzung Ä zu ae sucht, sondern 
> nach "Du bist nicht zwischen A und Z also bist Du _ _)

Ja, das ist IMHO das naheligendste und deswegen hatte ich das auch
genau *so* programmiert. (Komme mir keiner mit UTF-8 ;-))

Wenn man von dem Problem der Nummerierung mal absieht,
erledigt folgender Aufruf zweier meiner Tools genau das:

$ insubdirs-do correct-names

Dabei sorgt das erste Tool dafür, daß alles, was in den Args angegeben ist,
in allen subdirs auch ausgeführt wird.
Und ausgeführt wird da das in den Args angegebene Tool "correct-names", welches
im pwd alle Files namentlich korrigiert (bis auf die Nummerierung
alles, was Du oben wolltest).



Die Tools liegen noch nicht online, da "insubdirs-do"

1) auch im pwd, nicht nur den subdirs seine Aktionen macht
   und es für mich at home OK war, ich aber nicht der Allgemeinheit
   solch eine Inkonsistenz zwischen Namensgebung und Funktion zumuten wollte.

2) Ich das mal vor einer langen Zeit mal hier erwähnt hatte auf
   der linux-l und das Feedback dergestalt war, daß man das ja mit find
   erledigen könne und kein extra Tool dafür bräuchte.

Ich glaube bzgl. correct-names ar/wäre es auch nicht anders gelaufen.
Da gibt's ja tr und sed und awk und Perl.


Punkt 2) folgend kann ich dann nur, der Mehrheitsmeinung folgend
sagen: dazu braucht man ja kein spezielles Tool, denn as kann man
doch mit find und awk/sed/perl machen. (*)

Na dann: viel Spaß damit :->

Ich mache es jedenfalls entgegen der Mehrehitsmeinung anders.
Aber das rate ich Dir nicht an, sonst kriege ich hier wieder
Klassenkeile ;-)


Gruß,
   Oliver

 (*) : Ja, man kann mit vi bestimmt auch jpeg-Files erstellen :->



Mehr Informationen über die Mailingliste linux-l