• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

case-insensitives Kopieren von Dateien

Wahrscheinlich eine ziemliche Anfänger-Frage, zu der ich eine Menge beinahe-Antworten gefunden habe, jedoch nichts, was mein Problem wirklich löst. Vielleicht hat hier ja jemand eine Idee:

Auf meinem Linux-System habe ich einige Daten in in einer etwas komplexeren Datei/Verzeichnis-Struktur abgelegt (ca. 18000 Dateien in mehreren Ebenen von Unterverzeichnissen). Alle Dateien/Verzeichnisse sind mit Kleinbuchstaben benannt.
Der gleiche Verzeichnisbaum besteht auch auf einem Windows-System, allerdings sind die Datei- und Verzeichnisnamen hier eine bunte Mischung aus Klein- und Großbuchstaben.

Einige der Dateien auf dem Windows-Rechner haben sich jetzt geändert und ich möchte die Daten unter Linux gerne mit jenen "updaten".

Gibt es eine halbwegs komfortable Möglichkeit, Linux für den Kopiervorgang die Unterscheidung von Klein- und Großbuchstaben abzugewöhnen?

Ich muß so etwas
Code:
ordner1
	-dateiname1
	-dateiname2
	-dateiname3
ordner2
ordner3
...
hiermit überschreiben
Code:
Ordner1
	-DateiName1
	-dateiname2
	-DATEINAME3
ordner2
ORDNER3
...
ohne am Ende Dateien oder Verzeinisse durch das Kopieren zu "verdoppeln".

Ist das möglich oder komme ich nicht drumherum, mir jeweils den gesamten Verzeichnisbaum bei Linux zu löschen und von dem Windows-Rechner zu kopieren? Oder erst einmal alles manuell in Kleinbuchstaben umzubenennen?
 

abgdf

Guru
Willst Du im optimalen Fall das Kuddelmuddel der Groß- und Kleinbuchstaben erhalten, oder willst Du in der Linux-Partition (so wie bisher) lieber alles in Kleinbuchstaben haben?
 
OP
T

TennerDent

Newbie
Das ist egal. Optisch sind Kleinbuchstaben natürlich schöner. Praktisch kann ich beides weiter verarbeiten.
 

marce

Guru
wie greifst Du denn auf das Windows-System zu?

einen "einfachen, fertigen" Befehl wüsste ich jetzt nicht - aber mit ein wenig Scritping lässt sich das recht gut hinbekommen. Einfacher wäre natürlich, z.B. via rsync einen kompletten Abgleich zu fahren, "den Müll" mit zu übernehmen und den hinterher per Dublettensuche zu eliminieren.

Grundsätzlich sind unterschiedliche Dateisysteme mit unterschiedlichen Features immer ein Problem bei Datenabgleich. Und Du solltest vorher entscheiden, welches denn das führende System von beiden ist und dort die Bereinigung erledigen.

Alterantiv - für den Anfang mit umfangreicherem Abgleich-Volumen leben und rsync mit delete- Option - dann hast Du hinterher auf System B den Stand von A und kann von da an weiter arbeiten.
 

abgdf

Guru
Diese paar Zeilen würden schon "/windows/C" durchsuchen und alle Dateinamen insgesamt in Kleinschreibung ausgeben:
Code:
#!/usr/bin/perl

use warnings;
use strict;

use File::Find;

my $windows = "/windows/C";

find(\&wanted, $windows);

sub wanted {
    print lc($File::Find::name) . "\n";
}
Von da kann man je nachdem weitermachen.
Ich könnte das also locker schreiben. Ist nur'n bißchen schwierig mit dem Testen und mit Deinen konkreten Verhältnissen.
 
A

Anonymous

Gast
Das scheint eine recht interessante Aufgabe dahinter zustecken. Ich hab mal was probiert. ;)
Zuerst habe ich mir ein Windows Verzeichnis für die original Dateien erstellt und darin per Script ein paar Verzeichnisse und Dateien mit Groß+Kleinschreibung
Code:
robi@ULTRA-01:/tmp/test> find Windows/
Windows/
Windows/Test1
Windows/Test1/TeSt1
Windows/Test1/TeSt1/tEst9
Windows/Test1/TeSt1/tEst9/TeSt5
Windows/Test1/TeSt1/tEst9/TeSt5/Hupe
Windows/Test1/TeSt1/tEst9/TeSt5/Fahrad
Windows/Test1/TeSt1/tEst9/TeSt5/Auto
Windows/Test1/TeSt1/tEst9/TeSt5/Bremse
Windows/Test1/TeSt1/tEst9/TeSt5/Moped
Windows/Test1/TeSt9
Windows/Test1/TeSt9/tEst7
Windows/Test1/TeSt9/tEst7/TeSt3
Windows/Test1/TeSt9/tEst7/TeSt3/Hupe
Windows/Test1/TeSt9/tEst7/TeSt3/Fahrad
Windows/Test1/TeSt9/tEst7/TeSt3/Auto
Windows/Test1/TeSt9/tEst7/TeSt3/Bremse
Windows/Test1/TeSt9/tEst7/TeSt3/Moped
Windows/Test1/tesT2
Windows/Test1/tesT2/TeSt3
Windows/Test1/tesT2/TeSt3/tEst5
Windows/Test1/tesT2/TeSt3/tEst5/Hupe
Windows/Test1/tesT2/TeSt3/tEst5/Fahrad
Windows/Test1/tesT2/TeSt3/tEst5/Auto
Windows/Test1/tesT2/TeSt3/tEst5/Bremse
Windows/Test1/tesT2/TeSt3/tEst5/Moped
Windows/Test1/tesT2/TeSt7
Windows/Test1/tesT2/TeSt7/tEst9
Windows/Test1/tesT2/TeSt7/tEst9/Hupe
Windows/Test1/tesT2/TeSt7/tEst9/Fahrad
Windows/Test1/tesT2/TeSt7/tEst9/Auto
Windows/Test1/tesT2/TeSt7/tEst9/Bremse
Windows/Test1/tesT2/TeSt7/tEst9/Moped
Windows/Test1/tesT2/TeSt4
Windows/Test1/tesT2/TeSt4/tEst6
Windows/Test1/tesT2/TeSt4/tEst6/Hupe
Windows/Test1/tesT2/TeSt4/tEst6/Fahrad
Windows/Test1/tesT2/TeSt4/tEst6/Auto
Windows/Test1/tesT2/TeSt4/tEst6/Bremse
Windows/Test1/tesT2/TeSt4/tEst6/Moped
Windows/Test1/TeST8
Windows/Test1/TeST8/tEst4
Windows/Test1/TeST8/tEst4/TeSt1
Windows/Test1/TeST8/tEst4/TeSt1/Hupe
Windows/Test1/TeST8/tEst4/TeSt1/Fahrad
Windows/Test1/TeST8/tEst4/TeSt1/Auto
Windows/Test1/TeST8/tEst4/TeSt1/Bremse
Windows/Test1/TeST8/tEst4/TeSt1/Moped
und genau hier liegt auch schon die erste Problematik, das ganze muss noch eindeutig sein wenn man die Großbuchstaben in Kleinbuchstaben tranferiert hat, also "tesT2" und "TeSt2" in einem Verzeichnis ist nicht mehr eindeutig und würde im folgendem Verlauf meiner Tests irgendwo aufschlagen.
Damit das Ganze nicht zu kompliziert wird, habe ich Leerzeichen und andere Sonderzeichen in Datei- und Verzeichnisnamen und ähnliche Schweinereien vollkommen unbeachtet gelassen.

Als nächsten habe ich dann ein Verzeichnis Linux erstellt. und die Dateien dort hineinkopiert (für unsere Tests am besten gleich mit rsync).
Code:
robi@ULTRA-01:/tmp/test> mkdir Linux
robi@ULTRA-01:/tmp/test> rsync -av Windows/ Linux/
....

robi@ULTRA-01:/tmp/test> find  Windows Linux | sort |  pr --column=2 -w 100 -
Linux                                             Windows
Linux/Test1                                       Windows/Test1
Linux/Test1/TeSt1                                 Windows/Test1/TeSt1
Linux/Test1/TeSt1/tEst9                           Windows/Test1/TeSt1/tEst9
Linux/Test1/TeSt1/tEst9/TeSt5                     Windows/Test1/TeSt1/tEst9/TeSt5
Linux/Test1/TeSt1/tEst9/TeSt5/Auto                Windows/Test1/TeSt1/tEst9/TeSt5/Auto
Linux/Test1/TeSt1/tEst9/TeSt5/Bremse              Windows/Test1/TeSt1/tEst9/TeSt5/Bremse
Linux/Test1/TeSt1/tEst9/TeSt5/Fahrad              Windows/Test1/TeSt1/tEst9/TeSt5/Fahrad
Linux/Test1/TeSt1/tEst9/TeSt5/Hupe                Windows/Test1/TeSt1/tEst9/TeSt5/Hupe
Linux/Test1/TeSt1/tEst9/TeSt5/Moped               Windows/Test1/TeSt1/tEst9/TeSt5/Moped
Linux/Test1/tesT2                                 Windows/Test1/tesT2
Linux/Test1/tesT2/TeSt3                           Windows/Test1/tesT2/TeSt3
Linux/Test1/tesT2/TeSt3/tEst5                     Windows/Test1/tesT2/TeSt3/tEst5
Linux/Test1/tesT2/TeSt3/tEst5/Auto                Windows/Test1/tesT2/TeSt3/tEst5/Auto
Linux/Test1/tesT2/TeSt3/tEst5/Bremse              Windows/Test1/tesT2/TeSt3/tEst5/Bremse
Linux/Test1/tesT2/TeSt3/tEst5/Fahrad              Windows/Test1/tesT2/TeSt3/tEst5/Fahrad
Linux/Test1/tesT2/TeSt3/tEst5/Hupe                Windows/Test1/tesT2/TeSt3/tEst5/Hupe
Linux/Test1/tesT2/TeSt3/tEst5/Moped               Windows/Test1/tesT2/TeSt3/tEst5/Moped
Linux/Test1/tesT2/TeSt4                           Windows/Test1/tesT2/TeSt4
Linux/Test1/tesT2/TeSt4/tEst6                     Windows/Test1/tesT2/TeSt4/tEst6
Linux/Test1/tesT2/TeSt4/tEst6/Auto                Windows/Test1/tesT2/TeSt4/tEst6/Auto
Linux/Test1/tesT2/TeSt4/tEst6/Bremse              Windows/Test1/tesT2/TeSt4/tEst6/Bremse
Linux/Test1/tesT2/TeSt4/tEst6/Fahrad              Windows/Test1/tesT2/TeSt4/tEst6/Fahrad
Linux/Test1/tesT2/TeSt4/tEst6/Hupe                Windows/Test1/tesT2/TeSt4/tEst6/Hupe
Linux/Test1/tesT2/TeSt4/tEst6/Moped               Windows/Test1/tesT2/TeSt4/tEst6/Moped
Linux/Test1/tesT2/TeSt7                           Windows/Test1/tesT2/TeSt7
Linux/Test1/tesT2/TeSt7/tEst9                     Windows/Test1/tesT2/TeSt7/tEst9
Linux/Test1/tesT2/TeSt7/tEst9/Auto                Windows/Test1/tesT2/TeSt7/tEst9/Auto
Linux/Test1/tesT2/TeSt7/tEst9/Bremse              Windows/Test1/tesT2/TeSt7/tEst9/Bremse
Linux/Test1/tesT2/TeSt7/tEst9/Fahrad              Windows/Test1/tesT2/TeSt7/tEst9/Fahrad
Linux/Test1/tesT2/TeSt7/tEst9/Hupe                Windows/Test1/tesT2/TeSt7/tEst9/Hupe
Linux/Test1/tesT2/TeSt7/tEst9/Moped               Windows/Test1/tesT2/TeSt7/tEst9/Moped
Linux/Test1/TeST8                                 Windows/Test1/TeST8
Linux/Test1/TeST8/tEst4                           Windows/Test1/TeST8/tEst4
Linux/Test1/TeST8/tEst4/TeSt1                     Windows/Test1/TeST8/tEst4/TeSt1
Linux/Test1/TeST8/tEst4/TeSt1/Auto                Windows/Test1/TeST8/tEst4/TeSt1/Auto
Linux/Test1/TeST8/tEst4/TeSt1/Bremse              Windows/Test1/TeST8/tEst4/TeSt1/Bremse
Linux/Test1/TeST8/tEst4/TeSt1/Fahrad              Windows/Test1/TeST8/tEst4/TeSt1/Fahrad
Linux/Test1/TeST8/tEst4/TeSt1/Hupe                Windows/Test1/TeST8/tEst4/TeSt1/Hupe
Linux/Test1/TeST8/tEst4/TeSt1/Moped               Windows/Test1/TeST8/tEst4/TeSt1/Moped
Linux/Test1/TeSt9                                 Windows/Test1/TeSt9
Linux/Test1/TeSt9/tEst7                           Windows/Test1/TeSt9/tEst7
Linux/Test1/TeSt9/tEst7/TeSt3                     Windows/Test1/TeSt9/tEst7/TeSt3
Linux/Test1/TeSt9/tEst7/TeSt3/Auto                Windows/Test1/TeSt9/tEst7/TeSt3/Auto
Linux/Test1/TeSt9/tEst7/TeSt3/Bremse              Windows/Test1/TeSt9/tEst7/TeSt3/Bremse
Linux/Test1/TeSt9/tEst7/TeSt3/Fahrad              Windows/Test1/TeSt9/tEst7/TeSt3/Fahrad
Linux/Test1/TeSt9/tEst7/TeSt3/Hupe                Windows/Test1/TeSt9/tEst7/TeSt3/Hupe
Linux/Test1/TeSt9/tEst7/TeSt3/Moped               Windows/Test1/TeSt9/tEst7/TeSt3/Moped
Danach habe ich im Linux Verzeichnis die Dateinamen und Verzeichnisnamen alle klein gemacht.
Code:
robi@ULTRA-01:/tmp/test> find Linux | tac | while read F; do  FD=$(dirname $F); FN=$(basename $F); FN=${FN,,}; mv "$F" "$FD/$FN" ; done
Das Script ist noch ein wenig übereifrig, es macht aus dem Linux-Verzeichnis ein linux-Verzeichnis, aber das ist schnell behoben.
Code:
robi@ULTRA-01:/tmp/test> mv linux Linux
robi@ULTRA-01:/tmp/test> find  Windows Linux | sort |  pr --column=2 -w 100 -
Linux                                             Windows
Linux/test1                                       Windows/Test1
Linux/test1/test1                                 Windows/Test1/TeSt1
Linux/test1/test1/test9                           Windows/Test1/TeSt1/tEst9
Linux/test1/test1/test9/test5                     Windows/Test1/TeSt1/tEst9/TeSt5
Linux/test1/test1/test9/test5/auto                Windows/Test1/TeSt1/tEst9/TeSt5/Auto
Linux/test1/test1/test9/test5/bremse              Windows/Test1/TeSt1/tEst9/TeSt5/Bremse
Linux/test1/test1/test9/test5/fahrad              Windows/Test1/TeSt1/tEst9/TeSt5/Fahrad
Linux/test1/test1/test9/test5/hupe                Windows/Test1/TeSt1/tEst9/TeSt5/Hupe
Linux/test1/test1/test9/test5/moped               Windows/Test1/TeSt1/tEst9/TeSt5/Moped
Linux/test1/test2                                 Windows/Test1/tesT2
Linux/test1/test2/test3                           Windows/Test1/tesT2/TeSt3
Linux/test1/test2/test3/test5                     Windows/Test1/tesT2/TeSt3/tEst5
Linux/test1/test2/test3/test5/auto                Windows/Test1/tesT2/TeSt3/tEst5/Auto
Linux/test1/test2/test3/test5/bremse              Windows/Test1/tesT2/TeSt3/tEst5/Bremse
Linux/test1/test2/test3/test5/fahrad              Windows/Test1/tesT2/TeSt3/tEst5/Fahrad
Linux/test1/test2/test3/test5/hupe                Windows/Test1/tesT2/TeSt3/tEst5/Hupe
Linux/test1/test2/test3/test5/moped               Windows/Test1/tesT2/TeSt3/tEst5/Moped
Linux/test1/test2/test4                           Windows/Test1/tesT2/TeSt4
Linux/test1/test2/test4/test6                     Windows/Test1/tesT2/TeSt4/tEst6
Linux/test1/test2/test4/test6/auto                Windows/Test1/tesT2/TeSt4/tEst6/Auto
Linux/test1/test2/test4/test6/bremse              Windows/Test1/tesT2/TeSt4/tEst6/Bremse
Linux/test1/test2/test4/test6/fahrad              Windows/Test1/tesT2/TeSt4/tEst6/Fahrad
Linux/test1/test2/test4/test6/hupe                Windows/Test1/tesT2/TeSt4/tEst6/Hupe
Linux/test1/test2/test4/test6/moped               Windows/Test1/tesT2/TeSt4/tEst6/Moped
Linux/test1/test2/test7                           Windows/Test1/tesT2/TeSt7
Linux/test1/test2/test7/test9                     Windows/Test1/tesT2/TeSt7/tEst9
Linux/test1/test2/test7/test9/auto                Windows/Test1/tesT2/TeSt7/tEst9/Auto
Linux/test1/test2/test7/test9/bremse              Windows/Test1/tesT2/TeSt7/tEst9/Bremse
Linux/test1/test2/test7/test9/fahrad              Windows/Test1/tesT2/TeSt7/tEst9/Fahrad
Linux/test1/test2/test7/test9/hupe                Windows/Test1/tesT2/TeSt7/tEst9/Hupe
Linux/test1/test2/test7/test9/moped               Windows/Test1/tesT2/TeSt7/tEst9/Moped
Linux/test1/test8                                 Windows/Test1/TeST8
Linux/test1/test8/test4                           Windows/Test1/TeST8/tEst4
Linux/test1/test8/test4/test1                     Windows/Test1/TeST8/tEst4/TeSt1
Linux/test1/test8/test4/test1/auto                Windows/Test1/TeST8/tEst4/TeSt1/Auto
Linux/test1/test8/test4/test1/bremse              Windows/Test1/TeST8/tEst4/TeSt1/Bremse
Linux/test1/test8/test4/test1/fahrad              Windows/Test1/TeST8/tEst4/TeSt1/Fahrad
Linux/test1/test8/test4/test1/hupe                Windows/Test1/TeST8/tEst4/TeSt1/Hupe
Linux/test1/test8/test4/test1/moped               Windows/Test1/TeST8/tEst4/TeSt1/Moped
Linux/test1/test9                                 Windows/Test1/TeSt9
Linux/test1/test9/test7                           Windows/Test1/TeSt9/tEst7
Linux/test1/test9/test7/test3                     Windows/Test1/TeSt9/tEst7/TeSt3
Linux/test1/test9/test7/test3/auto                Windows/Test1/TeSt9/tEst7/TeSt3/Auto
Linux/test1/test9/test7/test3/bremse              Windows/Test1/TeSt9/tEst7/TeSt3/Bremse
Linux/test1/test9/test7/test3/fahrad              Windows/Test1/TeSt9/tEst7/TeSt3/Fahrad
Linux/test1/test9/test7/test3/hupe                Windows/Test1/TeSt9/tEst7/TeSt3/Hupe
Linux/test1/test9/test7/test3/moped               Windows/Test1/TeSt9/tEst7/TeSt3/Moped
Schön zu sehen , jetzt sollten wir die Ausgangskonfiguration von User: TennerDent haben, im Windows ist alles Groß+Klein und im Linux alles nur klein, aber sonst ist alles (hoffentlich) gleich und eindeutig.

Meine Idee jetzt ist folgende: eine 2. zusätzliche Dateistruktur (Verzeichnis Linuz) anlegen, in der die Verzeichnis und Dateinamen genauso wie im Windows Groß+Klein geschrieben sind, aber bei dem die richtigen Dateien, also die wirklichen Daten Hardlinks auf die kleingeschriebenen Daten-Dateien aus dem Linux-Verzeichnis sind.
Damit haben wir im Linux dann den ganzen Baum 2 mal, einmal alles Kleingeschrieben im Verzeichnis Linux und einmal als Sammlung von Hardlinks mit genau den selben Datei- und Verzeichnisnamen wie sie im Windows Verzeichnis sind. Klingt, kompliziert, aber kann man mit einem kleinem Script erledigen.
Code:
#!/bin/bash
WINDIR="/tmp/test/Windows"
LINDIR="/tmp/test/Linux"
NEUDIR="/tmp/test/Linuz"

mkdir -p ${NEUDIR}

find ${WINDIR} -mindepth 1 -type d | while read DIR 
do 
        DIR=${DIR#$WINDIR/} 
        mkdir -p ${NEUDIR}/${DIR}
done
find ${WINDIR} -mindepth 1 -type f | while read FILE
do
        FILENEU=${FILE#$WINDIR/} 
        FILELINK=${FILENEU,,}
        ln ${LINDIR}/${FILELINK} ${NEUDIR}/${FILENEU}
done
Am Anfang des Scriptes kann man die 3 Verzeichnisse entsprechend seinen Gegebenheiten anpassen. NEUDIR ist das Verzeichnis für die neue Struktur die wir anlegen wollen.
(ich hoffe ihr habt alle einen breiten Bildschrim, ansonsten müsst ihr das folgende mal in eine Textdatei kopieren, damit die Formatierung und Gegenüberstellung passt.
Code:
robi@ULTRA-01:/tmp/test> sh script.sh 
robi@ULTRA-01:/tmp/test> find  Windows Linux Linuz | sort |  pr --column=3 -w 150 -
Linux                                             Linuz                                             Windows
Linux/test1                                       Linuz/Test1                                       Windows/Test1
Linux/test1/test1                                 Linuz/Test1/TeSt1                                 Windows/Test1/TeSt1
Linux/test1/test1/test9                           Linuz/Test1/TeSt1/tEst9                           Windows/Test1/TeSt1/tEst9
Linux/test1/test1/test9/test5                     Linuz/Test1/TeSt1/tEst9/TeSt5                     Windows/Test1/TeSt1/tEst9/TeSt5
Linux/test1/test1/test9/test5/auto                Linuz/Test1/TeSt1/tEst9/TeSt5/Auto                Windows/Test1/TeSt1/tEst9/TeSt5/Auto
Linux/test1/test1/test9/test5/bremse              Linuz/Test1/TeSt1/tEst9/TeSt5/Bremse              Windows/Test1/TeSt1/tEst9/TeSt5/Bremse
Linux/test1/test1/test9/test5/fahrad              Linuz/Test1/TeSt1/tEst9/TeSt5/Fahrad              Windows/Test1/TeSt1/tEst9/TeSt5/Fahrad
Linux/test1/test1/test9/test5/hupe                Linuz/Test1/TeSt1/tEst9/TeSt5/Hupe                Windows/Test1/TeSt1/tEst9/TeSt5/Hupe
Linux/test1/test1/test9/test5/moped               Linuz/Test1/TeSt1/tEst9/TeSt5/Moped               Windows/Test1/TeSt1/tEst9/TeSt5/Moped
Linux/test1/test2                                 Linuz/Test1/tesT2                                 Windows/Test1/tesT2
Linux/test1/test2/test3                           Linuz/Test1/tesT2/TeSt3                           Windows/Test1/tesT2/TeSt3
Linux/test1/test2/test3/test5                     Linuz/Test1/tesT2/TeSt3/tEst5                     Windows/Test1/tesT2/TeSt3/tEst5
Linux/test1/test2/test3/test5/auto                Linuz/Test1/tesT2/TeSt3/tEst5/Auto                Windows/Test1/tesT2/TeSt3/tEst5/Auto
Linux/test1/test2/test3/test5/bremse              Linuz/Test1/tesT2/TeSt3/tEst5/Bremse              Windows/Test1/tesT2/TeSt3/tEst5/Bremse
Linux/test1/test2/test3/test5/fahrad              Linuz/Test1/tesT2/TeSt3/tEst5/Fahrad              Windows/Test1/tesT2/TeSt3/tEst5/Fahrad
Linux/test1/test2/test3/test5/hupe                Linuz/Test1/tesT2/TeSt3/tEst5/Hupe                Windows/Test1/tesT2/TeSt3/tEst5/Hupe
Linux/test1/test2/test3/test5/moped               Linuz/Test1/tesT2/TeSt3/tEst5/Moped               Windows/Test1/tesT2/TeSt3/tEst5/Moped
Linux/test1/test2/test4                           Linuz/Test1/tesT2/TeSt4                           Windows/Test1/tesT2/TeSt4
Linux/test1/test2/test4/test6                     Linuz/Test1/tesT2/TeSt4/tEst6                     Windows/Test1/tesT2/TeSt4/tEst6
Linux/test1/test2/test4/test6/auto                Linuz/Test1/tesT2/TeSt4/tEst6/Auto                Windows/Test1/tesT2/TeSt4/tEst6/Auto
Linux/test1/test2/test4/test6/bremse              Linuz/Test1/tesT2/TeSt4/tEst6/Bremse              Windows/Test1/tesT2/TeSt4/tEst6/Bremse
Linux/test1/test2/test4/test6/fahrad              Linuz/Test1/tesT2/TeSt4/tEst6/Fahrad              Windows/Test1/tesT2/TeSt4/tEst6/Fahrad
Linux/test1/test2/test4/test6/hupe                Linuz/Test1/tesT2/TeSt4/tEst6/Hupe                Windows/Test1/tesT2/TeSt4/tEst6/Hupe
Linux/test1/test2/test4/test6/moped               Linuz/Test1/tesT2/TeSt4/tEst6/Moped               Windows/Test1/tesT2/TeSt4/tEst6/Moped
Linux/test1/test2/test7                           Linuz/Test1/tesT2/TeSt7                           Windows/Test1/tesT2/TeSt7
Linux/test1/test2/test7/test9                     Linuz/Test1/tesT2/TeSt7/tEst9                     Windows/Test1/tesT2/TeSt7/tEst9
Linux/test1/test2/test7/test9/auto                Linuz/Test1/tesT2/TeSt7/tEst9/Auto                Windows/Test1/tesT2/TeSt7/tEst9/Auto
Linux/test1/test2/test7/test9/bremse              Linuz/Test1/tesT2/TeSt7/tEst9/Bremse              Windows/Test1/tesT2/TeSt7/tEst9/Bremse
Linux/test1/test2/test7/test9/fahrad              Linuz/Test1/tesT2/TeSt7/tEst9/Fahrad              Windows/Test1/tesT2/TeSt7/tEst9/Fahrad
Linux/test1/test2/test7/test9/hupe                Linuz/Test1/tesT2/TeSt7/tEst9/Hupe                Windows/Test1/tesT2/TeSt7/tEst9/Hupe
Linux/test1/test2/test7/test9/moped               Linuz/Test1/tesT2/TeSt7/tEst9/Moped               Windows/Test1/tesT2/TeSt7/tEst9/Moped
Linux/test1/test8                                 Linuz/Test1/TeST8                                 Windows/Test1/TeST8
Linux/test1/test8/test4                           Linuz/Test1/TeST8/tEst4                           Windows/Test1/TeST8/tEst4
Linux/test1/test8/test4/test1                     Linuz/Test1/TeST8/tEst4/TeSt1                     Windows/Test1/TeST8/tEst4/TeSt1
Linux/test1/test8/test4/test1/auto                Linuz/Test1/TeST8/tEst4/TeSt1/Auto                Windows/Test1/TeST8/tEst4/TeSt1/Auto
Linux/test1/test8/test4/test1/bremse              Linuz/Test1/TeST8/tEst4/TeSt1/Bremse              Windows/Test1/TeST8/tEst4/TeSt1/Bremse
Linux/test1/test8/test4/test1/fahrad              Linuz/Test1/TeST8/tEst4/TeSt1/Fahrad              Windows/Test1/TeST8/tEst4/TeSt1/Fahrad
Linux/test1/test8/test4/test1/hupe                Linuz/Test1/TeST8/tEst4/TeSt1/Hupe                Windows/Test1/TeST8/tEst4/TeSt1/Hupe
Linux/test1/test8/test4/test1/moped               Linuz/Test1/TeST8/tEst4/TeSt1/Moped               Windows/Test1/TeST8/tEst4/TeSt1/Moped
Linux/test1/test9                                 Linuz/Test1/TeSt9                                 Windows/Test1/TeSt9
Linux/test1/test9/test7                           Linuz/Test1/TeSt9/tEst7                           Windows/Test1/TeSt9/tEst7
Linux/test1/test9/test7/test3                     Linuz/Test1/TeSt9/tEst7/TeSt3                     Windows/Test1/TeSt9/tEst7/TeSt3
Linux/test1/test9/test7/test3/auto                Linuz/Test1/TeSt9/tEst7/TeSt3/Auto                Windows/Test1/TeSt9/tEst7/TeSt3/Auto
Linux/test1/test9/test7/test3/bremse              Linuz/Test1/TeSt9/tEst7/TeSt3/Bremse              Windows/Test1/TeSt9/tEst7/TeSt3/Bremse
Linux/test1/test9/test7/test3/fahrad              Linuz/Test1/TeSt9/tEst7/TeSt3/Fahrad              Windows/Test1/TeSt9/tEst7/TeSt3/Fahrad
Linux/test1/test9/test7/test3/hupe                Linuz/Test1/TeSt9/tEst7/TeSt3/Hupe                Windows/Test1/TeSt9/tEst7/TeSt3/Hupe
Linux/test1/test9/test7/test3/moped               Linuz/Test1/TeSt9/tEst7/TeSt3/Moped               Windows/Test1/TeSt9/tEst7/TeSt3/Moped

Jetzt kann ich einfach das Windows-Verzeichnis mit dem Linuz-Verzeichnis Synchronisieren, aber immer noch im Linux-Verzeichnis den Luxus der "Nur-kleinschreibung" genießen, auch noch nach der Synchronisation. Und die Synchronisation sollte theoretisch im Idealfall, sowohl in die Eine als auch in die Andere Richtung funktionieren. (Aber nur für schon bestehende Dateien, kommt in einem der 3 Verzeichnissbäume eine Datei neu hinzu, müssten erst wieder dafür die Hardlinks eingerichtet werden)
In unserem Fall sind keine Daten Dateien geändert worden, nur die Zeitstempel des Dateisystems auf Linuz ist anders als im Windows-Verzeichnis (da mittels Script angelegt und nicht durch Synchronisation), und dieses sollte rsync jetzt richtig erkennen und entsprechend nur die Verzeichnisse neu synchronisieren und die Datendateien gar nicht anfassen.
Code:
robi@ULTRA-01:/tmp/test> rsync -av Windows/ Linuz
sending incremental file list
./
Test1/
Test1/TeST8/
Test1/TeST8/tEst4/
Test1/TeST8/tEst4/TeSt1/
Test1/TeSt1/
Test1/TeSt1/tEst9/
Test1/TeSt1/tEst9/TeSt5/
Test1/TeSt9/
Test1/TeSt9/tEst7/
Test1/TeSt9/tEst7/TeSt3/
Test1/tesT2/
Test1/tesT2/TeSt3/
Test1/tesT2/TeSt3/tEst5/
Test1/tesT2/TeSt4/
Test1/tesT2/TeSt4/tEst6/
Test1/tesT2/TeSt7/
Test1/tesT2/TeSt7/tEst9/

sent 817 bytes  received 83 bytes  1800.00 bytes/sec
total size is 540  speedup is 0.60

Eine Änderung einer Datendatei im Windows mit anschließender Synchronisation mit dem Linuz -Verzeichnis sollte nur diese eine Datei neu schreiben und die Änderung bei richtigen Optionen sogar anschließend auch im Linux-Verzeichnis wieder zu finden sein. Ein bisschen aufpassen muss man also doch noch mit den rsync Parametern, sonst geht der Hardlink ins Linux-Verzeichnis verloren.
Code:
robi@ULTRA-01:/tmp/test> cat Linux/test1/test1/test9/test5/auto
Hallo Auto Hallo

robi@ULTRA-01:/tmp/test> echo "ich wurde geändert" >>  Windows/Test1/TeSt1/tEst9/TeSt5/Auto
robi@ULTRA-01:/tmp/test> rsync -av --inplace  Windows/ Linuz
sending incremental file list
Test1/TeSt1/tEst9/TeSt5/Auto

sent 858 bytes  received 48 bytes  1812.00 bytes/sec
total size is 563  speedup is 0.62
robi@ULTRA-01:/tmp/test> cat Linux/test1/test1/test9/test5/auto
Hallo Auto Hallo

ich wurde geändert

Ziel erreicht, ;) ;) ;) ;) ;) ;)
Aber Vorsicht, was hier im Test und theoretisch so schön und wunderbar einfach ausschaut, kann in der Praxis genauso gut auch durch Kleinigkeiten (Umlaute, Sonderzeichen, Leerzeichen,.....) wunderbar kompliziert werden.

robi
 

abgdf

Guru
robi schrieb:
Aber Vorsicht, was hier im Test und theoretisch so schön und wunderbar einfach ausschaut, kann in der Praxis genauso gut auch durch Kleinigkeiten (Umlaute, Sonderzeichen, Leerzeichen,.....) wunderbar kompliziert werden.
Genau, deshalb hatte ich auch noch kein fertiges Skript präsentiert.

Klar kann es mit Groß- und Kleinbuchstaben auf der Windows-Partition Mehrdeutiges geben, das dann - mit nur Kleinbuchstaben - zu nur einer Version wird, wobei ein Teil wegfällt. Deshalb war ich mir nicht sicher wegen seiner "Verhältnisse". Das heißt, wäre das ok, wenn was wegfällt, wie ist es jetzt?, usw.
Edit: Oder unterscheidet Windows gar nicht Groß- und Kleinbuchstaben, so daß es doch immer eindeutig ist, so als wären es nur Kleinbuchstaben?

Wahrscheinlich wäre es tatsächlich am sichersten, den Zielordner zu löschen und von der Windows-Partition neu rüberzukopieren. Viel Arbeit für den Rechner, dafür weniger für den User. ;)
 
Code:
while IFS= read -r; do
	flc="${REPLY/\/mnt\/windows/}"
	flc="${flc,,}"
	printf "Kopiere von %s nach /linux/%s\n" "$REPLY" "$flc"
	rsync -a "$REPLY" "/linux/$flc"
done <<< "$(find '/mnt/windows/ordner' -name '*')"

Gruß
Gräfin Klara
 

drcux

Hacker
Windows kennt keine Groß-/Kleinschreibung, auch nicht Windows 10. Es kann also eigentlich keine Datei test.txt und Test.txt in einem Verzeichnis existieren....
 
A

Anonymous

Gast
Gräfin Klara schrieb:
Code:
while IFS= read -r; do
	flc="${REPLY/\/mnt\/windows/}"
	flc="${flc,,}"
	printf "Kopiere von %s nach /linux/%s\n" "$REPLY" "$flc"
	rsync -a "$REPLY" "/linux/$flc"
done <<< "$(find '/mnt/windows/ordner' -name '*')"

Hast du das ausprobiert? So einfach ist das nicht zu erledigen. :/
Die Ausgabe die es produziert sieht ja fast noch normal aus , aber schon beim genaueren Hinsehen sieht man die Probleme zB. gleich in der ersten Zeile schreibt er, das er jetzt den ganzen Windowsbaum mal komplett nach nach linux kopiert wird, und zwar alles Groß+Kleine 1 zu 1.
Danach macht er das dann mit Teilbäumen auch noch mehrfach nur das er dann noch zusätzlich die Dateien und Verzeichnisse noch mal kleingeschrieben anlegt und dann die Dateien zusätzlich auch noch kleingeschrieben dort hinkopiert.

Das Script macht genau das, was es überhaupt nicht machen soll. :???:
Bei meinen paar Testdaten ist bei den Datenfiles die 6-Fache Menge herausgekommen, statt 30 ganze 180. Und bei einer entsprechend großen und breiten Dateistruktur kann das durchaus auch die 100 ober 1000 Fache Menge an Dateien ergeben, je nach dem wie groß das Zielverzeichnis ist, ( Aufgabenstellung hier glaube was von 150000 Dateien gelesen zu haben) ist das FS mit 100% Sicherheit vorher voll.

Es gibt wahrscheinlich nur einen vernünftigen Lösungsweg, die Mount- und Kopieroption wiederfinden mit der beim ursprünglichen Kopieren die Dateinamen alle klein geschrieben worden sind ....

robi
 
robi schrieb:
Hast du das ausprobiert? So einfach ist das nicht zu erledigen
Nein, ich habe es nicht probiert

robi schrieb:
... den ganzen Windowsbaum mal komplett nach nach linux kopiert wird, und zwar alles Groß+Kleine 1 zu 1.

Richtig, mein Fehler, habe die directories vergessen
Update:
Code:
while IFS= read -r; do
	flc="${REPLY/\/mnt\/windows/}"
	flc="${flc,,}"
	if [ -d "$REPLY" ]; then
		 	[ -d "/linux$flc" ] || mkdir -p "/linux$flc"
	 		continue
	fi
	printf "Kopiere von %s nach /linux/%s\n" "$REPLY" "$flc"
	rsync -a "$REPLY" "/linux/$flc"
done <<< "$(find '/mnt/windows/ordner' -name '*')"

Gruß
Gräfin Klara
 

abgdf

Guru
Gräfin Klara schrieb:
robi schrieb:
Hast du das ausprobiert? So einfach ist das nicht zu erledigen
Nein, ich habe es nicht probiert
...
Richtig, mein Fehler, habe die directories vergessen
Nicht zu probieren, aber zu posten, finde ich hier nicht gut. Wahrscheinlich hat der TE (= Threadersteller) gar keine Erfahrung mit Skripten, und wird dann (maximal) genau das ausführen, was hier gepostet wird. Wenn das dann nicht läuft, weil es nicht getestet ist, untergräbt das das Vertrauen in die Skripte hier.
Ich bin nach wie vor der Meinung, daß man seriöserweise bisher kein Skript anbieten kann. Dazu bräuchte es die Zusammenarbeit mit dem TE. Es würde eine gewisse Entwicklungszeit mit zahlreichen Rückmeldungen brauchen, die der TE auch durchhalten müßte.

Alternative wäre (wie gesagt): Alles von Windows aus ganz neu anlegen.
 

marce

Guru
drcux schrieb:
Windows kennt keine Groß-/Kleinschreibung, auch nicht Windows 10. Es kann also eigentlich keine Datei test.txt und Test.txt in einem Verzeichnis existieren....
Falsch. Windows kennt sehr wohl Groß- und Kleinschreibung bei Dateinamen. Es hat bei "Suchen nach Dateinamen" nur keine Auswikrung. Vereinfacht gessgt.
 
A

Anonymous

Gast
Gräfin Klara schrieb:
Update:
Code:
while IFS= read -r; do
	flc="${REPLY/\/mnt\/windows/}"
	flc="${flc,,}"
	if [ -d "$REPLY" ]; then
		 	[ -d "/linux$flc" ] || mkdir -p "/linux$flc"
	 		continue
	fi
	printf "Kopiere von %s nach /linux/%s\n" "$REPLY" "$flc"
	rsync -a "$REPLY" "/linux/$flc"
done <<< "$(find '/mnt/windows/ordner' -name '*')"
Okay, das scheint soweit zu funktionieren, ist aber so für einen normalen User nicht ausführbar, da es ihm schwer fallen dürfte dieses für seine Zwecke richtig anzupassen.
Aber wie es aussieht haben wir den Thread-Ersteller sowieso schon verschreckt, zu mindestens hat er sich nicht mehr gemeldet.

robi
 
robi schrieb:
Okay, das scheint soweit zu funktionieren, ist aber so für einen normalen User nicht ausführbar, da es ihm schwer fallen dürfte dieses für seine Zwecke richtig anzupassen.
Aber wie es aussieht haben wir den Thread-Ersteller sowieso schon verschreckt, zu mindestens hat er sich nicht mehr gemeldet.

robi

Keine Sorge, ich bin sehr wohl bereit, diesen code gemeinsam mit dem Thread-Ersteller so zu bearbeiten, dass er für ihn auch anwendbar ist.

Gruß
 
OP
T

TennerDent

Newbie
Sorry, daß ich hier ewig nicht mehr reingeschaut habe!
Vielen Dank für die unglaublichen Antworten. Kraß. :thumbs: :thumbs:
Ich bin in der Tat nicht besonders gut darin, Shell-Scripte zu schreiben, wenn ich fertigen Code sehe, finde ich aber schon einigermaßen heraus, was das Teil macht und ändere mir solche Scripte dann auch für eigene Zwecke ab.

Ich arbeite mich jetzt mal hier durch und schaue, was dabei herauskommt
 

uhelp

Member
Code:
find  /Pfad/zu/directory  -iname '*hallo*'  -exec cp {} /Pfad/zum/Ziel/ \;

finde in /Pfad/zu/directory alle Dateien die hallo irgendwo im -iname haben unter -i(name)gnorierung von Groß- u. Kleinschreibung und -execute den Befehl cp für jeden {} Fund nach /Pfad/zum/Ziel/ aus. \; Ende des -exec Befehls.

Mag sein, dass du noch ein paar Verzeichnisse erstellen musst.

Da kann dann sowas, wie ein weiteres -exec mkdir -p $(basedir {} ) helfen
 

spoensche

Moderator
Teammitglied
abgdf schrieb:
Alternative wäre (wie gesagt): Alles von Windows aus ganz neu anlegen.
Alternativ, aber nur, weil das von Windows aus neu anlegen fast untergeht. ;) Besser ist sync auf die Linux Büchse, Windows ausschalten, Plattem als zusätzlichen Speicher in die Linux Büchse und die Stabilität, Verfügbarkeit, und Funktionieren ist nicht nur ein "aus Redmon zu Marketingzwecken missbrauchtes Wort". ;)

Die Daten per Samba freigegeben und dann ist auch beim Daten schubsen Musik drin. ;)

Eine Platte läste im alten Win Rechner drin, plattmachen Linux drauf ein Spielzeug mehr im Gerätezoo und alle sind froh über die verfügbarezeit, weil Reboots so selten wie ein Lottogewinn geworden sind. Lebensqualität gesteigert ;) :)
 
Oben