Linux 既区分大小写又不区分大小写并且总是不方便?

Linux 既区分大小写又不区分大小写并且总是不方便?

我正在使用 Ubuntu 10,我很快发现它区分大小写,但这样做很不方便(例如在终端中使用制表符自动完成文件路径时),而且在使用 MV 和 CP 命令时不区分大小写(尝试复制具有不同大小写的文件名时也很不方便)。

本质上,我需要这个命令才能工作,但它不工作。

cp ./filename.txt ./FileName.txt

我最终得到的是filename.txt

在此处输入图片描述

如何才能获取同一目录中大小写不同但名称相同的同一文件?

编辑:Maerics 下面的注释让我想起我实际上是在运行 NTFS 的 Windows 共享驱动器上进行开发,该驱动器不区分大小写。这就是为什么即使 CP 和 MV 不会生成错误,文件也不会被复制(或者更可能是被复制了,但 Windows 会替换已经存在的文件)。

答案1

NTFS 1和 VFAT 不区分大小写,它们只是保留大小写。这意味着如果您创建一个名为 的文件FileName.txt,文件系统将保留大小写混合的名称,但您可以使用相同字母的任何大小写组合(如 、FILENAME.TXTfilename.txt)访问该文件fileNAME.txt。这解释了您不能在同一目录中拥有两个拼写相同但大小写不同的文件。

SMB 导出的文件系统必须实现此行为以免混淆 Windows 客户端。

可以配置 ZFS 以使用该casesensitivity=mixed属性来执行上述操作。

1 从技术上讲,NTFS 区分大小写,但安装此类文件系统的操作系统几乎总是配置为隐藏此基本功能并仅保留大小写。但是,Windows 可以通过修改此注册表项来启用区分大小写HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\dword:ObCaseInsensitive,而 Linux 可以根据ignore_casewindows_names安装选项以各种行为安装这些文件系统。

答案2

您可以通过在 bash 中添加以下行来启用不区分大小写的文件名补全$HOME/.inputrc

set completion-ignore-case On

关于文件名:这取决于文件系统。在 Linux 文件系统上,应该没有问题。在其他文件系统上,可以使用 mount 命令的选项来控制行为。有关mount(8)可用 mount 选项的更多信息,请参阅手册页。

答案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.txtFilename.txt是两个不同的文件,可以放在同一个目录中。因此此命令:

cp ./filename.txt ./FileName.txt

可以在同一目录中毫无问题地工作。

相关内容