Linux区分大小写和不区分大小写,并且总是很不方便吗?


8

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

本质上,我需要此命令才能工作,但实际上没有。

cp ./filename.txt ./FileName.txt

我刚结束filename.txt

在此处输入图片说明

如何在相同目录中使用大小写不同但名称相同的相同文件?

编辑:Maerics在下面的评论帮助我记住,我实际上是在运行Windows NT共享驱动器上开发的,该驱动器不区分大小写。这就是为什么即使CP和MV不会产生错误,也不会复制该文件的原因(或者更可能是IS复制的,但是Windows会替换已经存在的文件)。


1
真奇怪:我毫不意外地测试了此命令...同一目录下的不同情况我都没有问题。
DenysSéguret'12年

5
请注意,此行为可能取决于这些文件所在的文件系统的类型。例如,FAT32可能无法区分这些文件名。
maerics 2012年

哇。这就是Maerics的答案。这些文件存储在运行NTFS的已安装驱动器上。我完全忘记了,因为我正在开发使用Windows来存储文件的跨平台。
anon58192932'5

1
@拥护者:NTFS区分大小写,因此您应该能够以自己喜欢的方式安装它。但是,问题是这是否是您想要的:)
0xC0000022L 2012年

测试表明Windows 7似乎不区分大小写。
anon58192932

Answers:


4

NTFS 1和VFAT不区分大小写,它们只是保留大小写。这意味着如果你创建了一个名为文件FileName.txt,文件系统将保留大小写混合的名字,但你可以访问相同的字母,像任何情况下组合文件FILENAME.TXTfilename.txtfileNAME.txt。这说明在同一目录中不能有两个拼写相同的文件,且只能使用大写/小写形式。

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

可以将ZFS配置为以这种方式表现该casesensitivity=mixed属性。

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


2
NTFS绝对区分大小写的。但是,Win32不区分大小写,因此出于实际原因,大多数人都认为NTFS也不区分大小写。
Cody Gray

@CodyGray是的,您是正确的,感谢您指出此功能。底层的NTFS文件系统仅根据情况允许不同的文件名。
jlliagre

11

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

set completion-ignore-case On

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


你是对的。底层文件系统不是Linux文件系统,因此在CP和MV工作时,Windows选择保留已经存在的文件(由于不区分大小写而被覆盖),使它出现在Unix终端中,就像该命令根本不起作用一样。 。另外,感谢您完成忽略案例,这将有很大帮助!
anon58192932'5

“打开”区分大小写吗?;)
Arj

可悲的是,这在脚本中对您没有帮助。
Sridhar Sarnobat,

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

这对我来说可以。


上面的Maerics帮助我解决了问题。我正在Ubuntu中开发W​​indows-> linux端口,但是文件存储在Windows计算机上,但我忘了安装了驱动器。底层的NTFS阻止了两个文件同时存在。
anon58192932'5

1

Ubuntu不是部分区分大小写的。始终区分大小写。filename.txtFilename.txt是两个不同的文件,可以放在同一目录中。所以这个命令:

cp ./filename.txt ./FileName.txt

将在同一目录中正常工作。


虽然没有。我一直在努力找出最后一个小时。
anon58192932

2
可能是,您目前不在filename.txt自己的目录中吗?
PP

肯定在那里。
anon58192932'5

上面的Maerics帮助我解决了问题。我正在Ubuntu中开发W​​indows-> linux端口,但是文件存储在Windows计算机上,但我忘记了已安装驱动器。底层的NTFS阻止了两个文件同时存在。
anon58192932'5

2
我看到了Maerics的评论。thx
PP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.