Linux Groß- und Kleinschreibung beachten UND Groß- und Kleinschreibung beachten und immer unbequem?

8

Ich verwende Ubuntu 10 und stelle schnell fest, dass die Groß- und Kleinschreibung beachtet wird, wenn dies unpraktisch ist (z. B. beim automatischen Vervollständigen von Dateipfaden mit Tabulator im Terminal), aber auch die Groß- und Kleinschreibung nicht berücksichtigt wird, wenn die Befehle MV und CP verwendet werden (ebenfalls unpraktisch) beim Versuch, einen Dateinamen in einem anderen Fall zu duplizieren).

Im Wesentlichen muss dieser Befehl funktionieren, aber er funktioniert nicht.

cp ./filename.txt ./FileName.txt

Am Ende habe ich nur filename.txt:

Geben Sie hier die Bildbeschreibung ein

Wie kann ich dieselbe Datei mit einem anderen Fall, aber demselben Namen im selben Verzeichnis erhalten?

BEARBEITEN: Der Kommentar von Maerics unten hat mir geholfen, mich daran zu erinnern, dass ich tatsächlich auf einem gemeinsam genutzten Windows-Laufwerk entwickle, auf dem NTFS ausgeführt wird, wobei die Groß- und Kleinschreibung nicht berücksichtigt wird. Aus diesem Grund wird die Datei nicht kopiert, obwohl CP und MV keinen Fehler generieren (oder eher kopiert, aber Windows ersetzt die bereits vorhandene).

anon58192932
quelle
1
Das ist seltsam: Ich habe diesen Befehl ohne Überraschung getestet ... Ich habe kein Problem mit verschiedenen Fällen im selben Verzeichnis.
Denys Séguret
5
Beachten Sie, dass dieses Verhalten vom Typ des Dateisystems abhängen kann, auf dem diese Dateien vorhanden sind. Beispielsweise kann FAT32 diese Dateinamen nicht unterscheiden.
Maerics
BEEINDRUCKEND. Dies war die Antwort Maerics. Die Dateien werden auf einem bereitgestellten Laufwerk gespeichert, auf dem NTFS ausgeführt wird. Da ich plattformübergreifend entwickle, habe ich völlig vergessen, dass ich Windows zum Speichern der Dateien verwende.
anon58192932
1
@advocate: Bei NTFS wird zwischen Groß- und Kleinschreibung unterschieden, daher sollten Sie es nach Ihren Wünschen bereitstellen können. Die Frage ist jedoch, ob dies das ist, was Sie wollen :)
0xC0000022L
Tests zeigen, dass Windows 7 nicht zwischen Groß- und Kleinschreibung unterscheidet.
anon58192932

Antworten:

4

NTFS 1 und VFAT unterscheiden nicht zwischen Groß- und Kleinschreibung, sondern nur zwischen Groß- und Kleinschreibung. Das heißt , wenn Sie eine Datei mit dem Namen erstellen FileName.txt, wird das Dateisystem der gemischten Fall Namen erhalten, sondern Sie die Datei mit dem, was Fall Kombination aus denselben Buchstaben zugreifen können, wie FILENAME.TXT, filename.txtoder fileNAME.txt. Dies erklärt, dass Sie nicht zwei Dateien mit derselben Schreibweise mit nur einer Variation von Groß- / Kleinbuchstaben im selben Verzeichnis haben können.

SMB-exportierte Dateisysteme müssen dieses Verhalten implementieren, um Windows-Clients nicht zu verwirren.

ZFS kann so konfiguriert werden, dass es sich mit der casesensitivity=mixedEigenschaft so verhält .

1 Technisch unterscheidet NTFS zwischen Groß- und Kleinschreibung, aber die Betriebssysteme, die Dateisysteme dieses Typs bereitstellen, sind fast immer so konfiguriert, dass diese zugrunde liegende Funktion ausgeblendet wird und nur die Groß- und Kleinschreibung beibehalten wird. Windows kann jedoch die Groß- und Kleinschreibung durch Ändern dieses Registerschlüssels aktivieren, HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\dword:ObCaseInsensitiveund Linux kann diese Dateisysteme abhängig von den Optionen ignore_caseund windows_namesmount mit verschiedenen Verhaltensweisen bereitstellen .

jlliagre
quelle
2
NTFS absolut ist case-sensitive. Win32 unterscheidet jedoch nicht zwischen Groß- und Kleinschreibung. Aus praktischen Gründen gehen die meisten Leute davon aus, dass NTFS dies auch nicht ist.
Cody Gray
@CodyGray Ja, Sie haben Recht, danke, dass Sie auf diese Funktion hingewiesen haben. Das zugrunde liegende NTFS-Dateisystem erlaubt unterschiedliche Dateinamen, die sich nur von Fall zu Fall unterscheiden.
Jlliagre
11

Sie können die Vervollständigung des Dateinamens ohne Berücksichtigung der Groß- und Kleinschreibung in Bash aktivieren, indem Sie die folgende Zeile hinzufügen $HOME/.inputrc:

set completion-ignore-case On

Zu den Dateinamen: Dies hängt vom Dateisystem ab. Auf Linux-Dateisystemen sollte es kein Problem geben. Auf anderen Dateisystemen kann das Verhalten mit Optionen für den Befehl mount gesteuert werden. mount(8)Weitere Informationen zu den verfügbaren Optionen zum Mounten finden Sie auf der Handbuchseite .

nosid
quelle
Du hast Recht. Das zugrunde liegende Dateisystem war kein Linux-Dateisystem. Während CP und MV funktionieren, behält Windows die bereits vorhandene Datei bei (wenn sie aufgrund der Groß- und Kleinschreibung überschrieben wird), sodass sie im Unix-Terminal angezeigt wird, als ob der Befehl überhaupt nicht funktioniert hätte . Vielen Dank auch für den Fall, dass die Fertigstellung ignoriert wird. Das wird sehr hilfreich sein!
anon58192932
Ist bei Groß- und Kleinschreibung die Groß- und Kleinschreibung zu beachten? ;)
Arj
Leider hilft Ihnen dies in einem Skript nicht weiter.
Sridhar Sarnobat
2

Ist dies eine Eigenschaft des Dateisystems oder etwas anderes?

pa-ubuntu-11388$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.3 LTS
Release:        10.04
Codename:       lucid
pa-ubuntu-11388$ ls -l
pa-ubuntu-11388$ touch filename.txt
pa-ubuntu-11388$ ls -l
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 filename.txt
pa-ubuntu-11388$ cp ./filename.txt ./FileName.txt
pa-ubuntu-11388$ ls -l
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 FileName.txt
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 filename.txt

Es funktioniert gut für mich.

D. Shawley
quelle
Die oben genannten Maerics haben mir geholfen, das Problem zu lösen. Ich entwickle in Ubuntu einen Windows -> Linux-Port, aber die Dateien werden auf dem Windows-Computer gespeichert und ich habe vergessen, dass ich das Laufwerk gemountet habe. Das zugrunde liegende NTFS verhinderte, dass beide Dateien gleichzeitig vorhanden waren.
anon58192932
1

Ubuntu unterscheidet nicht teilweise zwischen Groß- und Kleinschreibung. Es wird immer zwischen Groß- und Kleinschreibung unterschieden. filename.txtund Filename.txtsind zwei verschiedene Dateien und können im selben Verzeichnis abgelegt werden. Also dieser Befehl:

cp ./filename.txt ./FileName.txt

funktioniert problemlos im selben Verzeichnis.

PP
quelle
Das tut es aber nicht. Ich habe in der letzten Stunde versucht, es herauszufinden.
anon58192932
2
Vielleicht haben Sie sich nicht filename.txtin Ihrem aktuellen Verzeichnis?
PP
Es ist definitiv da drin.
anon58192932
Die oben genannten Maerics haben mir geholfen, das Problem zu lösen. Ich entwickle in Ubuntu einen Windows -> Linux-Port, aber die Dateien werden auf dem Windows-Computer gespeichert und ich habe vergessen, dass ich das Laufwerk gemountet habe. Das zugrunde liegende NTFS verhinderte, dass beide Dateien gleichzeitig vorhanden waren.
anon58192932
2
Ich habe Maerics Kommentar gesehen. thx
PP