Linux: Як чутливий до регістру, так і чутливий до випадків і завжди незручний?


8

Я використовую Ubuntu 10 і швидко дізнаюся, що він чутливий до регістру, коли це незручно, щоб це було так (як, наприклад, при автозаповнюванні файлових шляхів з вкладкою в терміналі), але також буває нечутливим при використанні команд MV і CP (також незручно при спробі дублювання імені файлу з іншим регістром).

По суті, мені потрібна робота цієї команди, але вона не працює.

cp ./filename.txt ./FileName.txt

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

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

Як я можу отримати той самий файл з іншим регістром, але те саме ім'я в одному каталозі?

EDIT: Коментар Maerics нижче допоміг мені запам'ятати, що я насправді розробляю на спільному диску Windows під управлінням NTFS, що є нечутливим до випадку. Ось чому навіть незважаючи на те, що CP та MV не створюють помилок, файл не копіюється (або скоріше копіюється IS, але Windows замінює вже існуючий).


1
Це дивно: я перевірив цю команду без здивування ... У мене немає проблем з різними справами в одному каталозі.
Denys Séguret

5
Зауважте, що така поведінка може залежати від типу файлової системи, на якій ці файли існують. Наприклад, FAT32 може не диференціювати ці назви файлів.
maerics

ОГО. Це була відповідь Maerics. Файли зберігаються на змонтованому диску, на якому працює NTFS. Я повністю забув, оскільки розробляю крос-платформу, що використовую Windows для зберігання файлів.
anon58192932

1
@advocate: NTFS відрізняється від регістру, тому вам слід мати змогу встановлювати його так, як вам подобається. Однак питання полягає в тому, чи цього ви хочете :)
0xC0000022L

Тестування показує, що Windows 7, схоже, не відрізняється від регістру.
anon58192932

Відповіді:


5

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монтажу.


3
NTFS абсолютно є чутливі до регістру. Однак Win32 не враховує регістри, тому з практичних причин більшість людей вважають, що NTFS також не є.
Коді Грей

@CodyGray Так, ви праві, дякую за вказівку на цю функцію. Базова файлова система NTFS дозволяє різним іменам файлів, лише залежно від випадку.
jlliagre

11

Ви можете ввімкнути завершення імені файлу, що не враховує регістр, додавши наступний рядок до $HOME/.inputrc:

set completion-ignore-case On

Щодо імен файлів: це залежить від файлової системи. У файлових системах Linux проблем не повинно бути. В інших файлових системах поведінку можна контролювати за допомогою параметрів команди mount. Для mount(8)отримання додаткової інформації про доступні параметри для монтажу див. Сторінку з посібником .


Ви праві. Базова файлова система не була файловою системою Linux, тому в той час, як CP і MV працюють, Windows вирішує зберегти вже існуючий файл (при переосмисленні через нечутливість випадку), який робить його відображенням в терміналі Unix, як команда взагалі не працює. . Також дякую за ігнорування справи про завершення, що дуже допоможе!
anon58192932

Чи чутливий до регістру "On"? ;)
Ардж

На жаль, це не допоможе вам у сценарії.
Шрідхар Сарнобат

2

Це властивість файлової системи чи щось інше?

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

Це прекрасно працює для мене.


Вказана вище маріка допомогла мені вирішити проблему. Я розробляю в Ubuntu порт Windows -> Linux, але файли зберігаються на комп'ютері Windows, і я забув, що у мене встановлений диск. Основний NTFS запобігав існуванню обох файлів одночасно.
anon58192932

1

Ubuntu частково не враховує регістру. Це завжди враховує регістри. filename.txtі Filename.txtє двома різними файлами і можуть бути розміщені в одному каталозі. Отже, ця команда:

cp ./filename.txt ./FileName.txt

буде працювати без проблем в одному каталозі.


Незважаючи на це. Я намагався це зрозуміти протягом останньої години.
anon58192932

2
може бути, у вас немає filename.txtу поточному каталозі ур?
ПП

Однозначно там.
anon58192932

Вказана вище маріка допомогла мені вирішити проблему. Я розробляю в Ubuntu порт Windows -> Linux, але файли зберігаються на комп'ютері Windows, і я забув, що у мене встановлений диск. Основний NTFS запобігав існуванню обох файлів одночасно.
anon58192932

2
Я бачив коментар Maerics. thx
PP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.