![Linux 區分大小寫和不區分大小寫總是不方便?](https://rvso.com/image/1316780/Linux%20%E5%8D%80%E5%88%86%E5%A4%A7%E5%B0%8F%E5%AF%AB%E5%92%8C%E4%B8%8D%E5%8D%80%E5%88%86%E5%A4%A7%E5%B0%8F%E5%AF%AB%E7%B8%BD%E6%98%AF%E4%B8%8D%E6%96%B9%E4%BE%BF%EF%BC%9F.png)
我正在使用Ubuntu 10,我很快就發現它在不方便的情況下區分大小寫(例如在終端機中使用製表符自動完成文件路徑時),但在使用MV 和CP 命令時也不區分大小寫(也不方便)當嘗試使用不同的大小寫複製檔案名稱時)。
本質上,我需要這個命令才能工作,但事實並非如此。
cp ./filename.txt ./FileName.txt
我最終得到的是filename.txt
:
如何在同一目錄中取得大小寫不同但名稱相同的相同檔案?
編輯:Maerics 下面的評論幫助我記住,我實際上正在運行 NTFS 的 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
在同一目錄中將毫無問題地工作。