设想
我有一台 NAS(基于 DSM 4.3 的 Synology DS1813+)。它运行 Linux 版本,因此文件系统(据说)区分大小写。我使用 2 台计算机访问 NAS。其中一台运行 Windows 7(不区分大小写的文件系统),并通过网络共享连接到 NAS。另一台运行 Linux Mint(区分大小写的文件系统),并使用 CIFS 安装 NAS。
我将数码相机(佳能 7D)连接到 Windows 计算机,并通过网络共享将相机中的图像导入 NAS。存储在 NAS 上的图像具有大写扩展名(IMG_8835.JPG)。
后来,在 Linux 机器上,我尝试批量重命名这些图像,以便使用以下命令和输出将扩展名改为小写:
$ find . -name '*.*' -exec sh -c 'a=$(echo {} | sed -r "s/([^.]*)\$/\L\1/"); [ "$a" != "{}" ] && mv "{}" "$a" ' \;
mv: ‘./IMG_8835.JPG’ and ‘./IMG_8835.jpg’ are the same file
和:
$ rename s/.JPG/.jpg/ *.JPG
IMG_8835.JPG not renamed: IMG_8835.jpg already exists
这表明文件系统不区分大小写。对吗?
此外,我还尝试过:
$ rename -f s/.JPG/.jpg/ *.JPG
此命令的输出为空白,因此我怀疑它起作用了。但是当我查看文件时,它们仍然具有大写扩展名。文件没有重复。没有任何类型的文件*.jpg
。它们仍然都是*.JPG
。
问题
- 是否有一个命令行(bash 命令)可以报告本地和远程文件系统的区分大小写?
- 看来文件系统不区分大小写。这让我很困惑。怎么会这样?NAS 上的远程文件系统和运行 Linux 的机器上的本地文件系统(据说)都是区分大小写的文件系统。
- 是否有可能,即使 NAS 文件系统(据称)区分大小写,但由于文件夹和文件是在通过网络共享连接 NAS 时从 Windows 在 NAS 上创建的,因此 Windows 创建的文件和文件夹不区分大小写?如果是这样,从 Linux 机器连接到 NAS 时是否可以修改 Windows 创建的对象的大小写敏感性?
注意:这个问题不是这个的重复问题因为这个问题询问的是文件系统是否区分大小写,而不是如何批量重命名文件。
答案1
一位朋友向我指出这。链接的文章长达 8 页,但解释得非常冗长。答案的简短版本是:
... And that brings me to what I really want to discuss, which is how
CIFS Server (Samba) deals with this.
As you would expect from an application that was grown to bridge
the gap between the Unix and Windows worlds, it is very flexible.
This is both good and bad - with flexibility comes responsibility,
and sometimes not a little confusion. There are four configuration
options that Samba provides to allow one to define its behavior
when dealing with matters of 'case':
preserve case = (yes/no)
short preserve case = (yes/no)
default case = (upper/lower)
case sensitive = (yes/no)
解决办法是配置 Samba以适合您的特定需求的方式处理大小写敏感问题(或大小写保留问题)。