Linux чувствителен и нечувствителен к регистру и всегда неудобен?

Linux чувствителен и нечувствителен к регистру и всегда неудобен?

Я использую Ubuntu 10 и быстро понял, что система чувствительна к регистру, когда это неудобно (например, при автодополнении путей к файлам с помощью клавиши Tab в терминале), а также НЕчувствительна к регистру при использовании команд MV и CP (что также неудобно при попытке продублировать имя файла с другим регистром).

По сути, мне нужно, чтобы эта команда работала, но она не работает.

cp ./filename.txt ./FileName.txt

Я просто заканчиваю с filename.txt:

введите описание изображения здесь

Как мне получить тот же файл с другим регистром, но с тем же именем в том же каталоге?

EDIT: комментарий Maerics ниже помог мне вспомнить, что я на самом деле разрабатываю на общем диске Windows, работающем под управлением NTFS, который НЕчувствителен к регистру. Вот почему, хотя CP и MV не генерируют ошибку, файл не копируется (или, что более вероятно, копируется, но Windows заменяет уже существующий).

решение1

NTFS 1 и VFAT не чувствительны к регистру, они просто сохраняют регистр. Это означает, что если вы создаете файл с именем FileName.txt, файловая система сохранит смешанное имя, но вы можете получить доступ к файлу с любой комбинацией тех же букв в любом регистре, например FILENAME.TXT, filename.txtили fileNAME.txt. Это объясняет, почему вы не можете иметь два файла с одинаковым написанием, отличающиеся только заглавными/строчными буквами, в одном каталоге.

Экспортированная файловая система SMB должна реализовать это поведение, чтобы не путать клиенты Windows.

ZFS можно настроить на такое поведение с помощью casesensitivity=mixedсвойства.

1 Технически NTFS чувствительна к регистру, но монтирующие файловые системы ОС этого типа почти всегда настроены на то, чтобы скрыть эту базовую функцию и сохранить только регистр. Однако Windows может включить чувствительность к регистру, изменив этот ключ регистра, HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\dword:ObCaseInsensitiveа Linux может монтировать эти файловые системы с различным поведением в зависимости от параметров ignore_caseи windows_namesмонтирования.

решение2

Вы можете включить в bash автодополнение имен файлов без учета регистра, добавив следующую строку $HOME/.inputrc:

set completion-ignore-case On

Что касается имен файлов: это зависит от файловой системы. В файловых системах Linux проблем быть не должно. В других файловых системах поведение можно контролировать с помощью опций команды mount. mount(8)Дополнительную информацию о доступных опциях монтирования см. на странице руководства.

решение3

Это свойство файловой системы или что-то ещё?

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

Он отлично работает для меня.

решение4

Ubuntu не чувствителен к регистру. Он всегда чувствителен к регистру. filename.txtи Filename.txtэто два разных файла, которые могут быть размещены в одном каталоге. Поэтому эта команда:

cp ./filename.txt ./FileName.txt

будет работать без проблем в том же каталоге.

Связанный контент