Linux ทั้งตัวพิมพ์เล็กและใหญ่และตัวพิมพ์เล็กและไม่สะดวกเสมอ?


8

ฉันใช้ Ubuntu 10 และฉันพบว่าตัวพิมพ์เล็กและตัวพิมพ์ใหญ่เมื่อไม่สะดวก (เช่นเมื่อทำการปรับเส้นทางไฟล์โดยอัตโนมัติด้วยแท็บในเทอร์มินัล) แต่ยังใช้งานไม่ได้เมื่อใช้คำสั่ง MV และ CP เมื่อพยายามทำซ้ำชื่อไฟล์ด้วยกรณีอื่น)

ในสาระสำคัญฉันต้องการคำสั่งนี้ทำงาน แต่ไม่

cp ./filename.txt ./FileName.txt

ฉันจบลงด้วยfilename.txt:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันจะรับไฟล์เดียวกันโดยใช้ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ แต่ชื่อเดียวกันในไดเรกทอรีเดียวกันได้อย่างไร

แก้ไข: ความคิดเห็นของ Maerics ด้านล่างช่วยให้ฉันจำได้ว่าจริง ๆ แล้วฉันกำลังพัฒนาบนไดรฟ์ที่ใช้ร่วมกันของ Windows ที่ใช้ NTFS ซึ่งเป็นกรณีที่ไม่สำคัญ นี่คือสาเหตุที่แม้ว่า CP และ MV จะไม่สร้างข้อผิดพลาด แต่ไฟล์จะไม่ถูกคัดลอก (หรือมีแนวโน้มว่าจะถูกคัดลอก แต่ Windows จะแทนที่ไฟล์ที่มีอยู่แล้ว)


1
แปลกมาก: ฉันทดสอบคำสั่งนี้โดยไม่แปลกใจ ... ฉันไม่มีปัญหากับกรณีที่แตกต่างกันในไดเรกทอรีเดียวกัน
Denys Séguret

5
โปรดทราบว่าพฤติกรรมนี้อาจขึ้นอยู่กับประเภทของระบบไฟล์ที่มีไฟล์เหล่านี้อยู่ ตัวอย่างเช่น FAT32 อาจไม่แยกความแตกต่างของชื่อไฟล์เหล่านี้
maerics

ว้าว. นี่คือคำตอบของ Maerics ไฟล์จะถูกเก็บไว้ในไดรฟ์ที่ติดตั้งซึ่งใช้งาน NTFS ฉันลืมไปแล้วตั้งแต่ฉันพัฒนา cross platform ที่ฉันใช้ 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 คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ แต่ระบบไฟล์การติดตั้ง OSes ประเภทนี้เกือบทุกครั้งจะมีการกำหนดค่าให้ซ่อนคุณสมบัติที่ซ่อนอยู่และเก็บรักษาเคสเท่านั้น อย่างไรก็ตาม Windows สามารถเปิดใช้งานการพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่โดยการแก้ไขคีย์การลงทะเบียนนี้HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\dword:ObCaseInsensitiveและ Linux สามารถเมาท์ระบบไฟล์เหล่านี้ด้วยพฤติกรรมที่หลากหลายขึ้นอยู่กับตัวเลือกignore_caseและการwindows_namesเมานต์


3
NTFS เป็นกรณี ๆ ไป อย่างไรก็ตาม Win32 ไม่คำนึงถึงขนาดตัวพิมพ์ดังนั้นสำหรับเหตุผลเชิงปฏิบัติคนส่วนใหญ่คิดว่า NTFS นั้นไม่เหมือนกัน
โคดี้เกรย์

@CodyGray ใช่ถูกต้องแล้วขอบคุณที่ชี้คุณสมบัตินี้ ระบบไฟล์ NTFS พื้นฐานช่วยให้ชื่อไฟล์ที่แตกต่างกันแตกต่างกันเฉพาะในกรณีที่
jlliagre

11

คุณสามารถเปิดใช้งานการเติมชื่อไฟล์ให้ตรงตามตัวพิมพ์ใหญ่ - เล็กใน bash โดยเพิ่มบรรทัดต่อไปนี้ลงใน$HOME/.inputrc:

set completion-ignore-case On

เกี่ยวกับชื่อไฟล์: ขึ้นอยู่กับระบบไฟล์ บนระบบไฟล์ Linux ไม่ควรมีปัญหา บนระบบไฟล์อื่นลักษณะการทำงานสามารถควบคุมได้ด้วยตัวเลือกต่างๆสำหรับคำสั่ง mount ดูหน้าคู่มือmount(8)สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกที่มีในการเมานต์


คุณถูก. ระบบไฟล์พื้นฐานไม่ได้เป็นระบบไฟล์ Linux ดังนั้นในขณะที่ CP และ MV ทำงาน Windows เลือกที่จะเก็บไฟล์ที่มีอยู่แล้ว (เมื่อลบล้างเพราะกรณีที่ไม่มีความสำคัญ) กรณีซึ่งทำให้มันปรากฏใน terminal Unix เช่นคำสั่งไม่ทำงานเลย . นอกจากนี้ขอขอบคุณสำหรับกรณีเพิกเฉยที่เสร็จสมบูรณ์ซึ่งจะช่วยได้มาก!
anon58192932

ตัวพิมพ์ใหญ่เล็ก 'เล็ก' หรือไม่ ;)
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 เป็น windows -> พอร์ต linux แต่ไฟล์ถูกเก็บไว้ในคอมพิวเตอร์ Windows และฉันลืมไปว่ามีการติดตั้งไดรฟ์ NTFS พื้นฐานได้ป้องกันทั้งสองไฟล์จากที่มีอยู่ในเวลาเดียวกัน
anon58192932

1

อูบุนตูไม่คำนึงถึงขนาดตัวพิมพ์บางส่วน เป็นตัวพิมพ์เล็กและใหญ่ filename.txtและFilename.txtเป็นสองไฟล์ที่แตกต่างกันและสามารถวางไว้ในไดเรกทอรีเดียวกัน ดังนั้นคำสั่งนี้:

cp ./filename.txt ./FileName.txt

จะทำงานได้โดยไม่มีปัญหาใด ๆ ในไดเรกทอรีเดียวกัน


ไม่ว่า ฉันพยายามคิดออกในชั่วโมงสุดท้าย
anon58192932

2
อาจเป็นเพราะคุณไม่มีfilename.txtในไดเรกทอรีปัจจุบันใช่ไหม
PP

มันอยู่ในนั้นแน่นอน
anon58192932

Maerics ด้านบนช่วยฉันแก้ปัญหาได้ ฉันกำลังพัฒนาใน Ubuntu เป็น windows -> พอร์ต linux แต่ไฟล์ถูกเก็บไว้ในคอมพิวเตอร์ Windows และฉันลืมไปว่ามีการติดตั้งไดรฟ์ NTFS พื้นฐานได้ป้องกันทั้งสองไฟล์จากที่มีอยู่ในเวลาเดียวกัน
anon58192932

2
ฉันเห็นความคิดเห็นของ Maerics ขอบคุณ
PP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.