มีคนบอกว่าคุณไม่ควรใช้ช่องว่างในการตั้งชื่อไฟล์ Unix มีเหตุผลที่ดีที่จะไม่ใช้อักษรตัวพิมพ์ใหญ่ในชื่อไฟล์ (เช่นFile_Name.txt
vs. file_name.txt
) หรือนี่เป็นเพียงเรื่องของการตั้งค่าส่วนตัว?
มีคนบอกว่าคุณไม่ควรใช้ช่องว่างในการตั้งชื่อไฟล์ Unix มีเหตุผลที่ดีที่จะไม่ใช้อักษรตัวพิมพ์ใหญ่ในชื่อไฟล์ (เช่นFile_Name.txt
vs. file_name.txt
) หรือนี่เป็นเพียงเรื่องของการตั้งค่าส่วนตัว?
คำตอบ:
มีคนบอกว่าคุณไม่ควรเว้นวรรคในการตั้งชื่อไฟล์ Unix
ผู้คนพูดหลายสิ่งหลายอย่าง มีเครื่องมือบางอย่างที่อาจทำให้ล้มเหลว แต่หวังว่าพวกเขาจะมีจำนวนไม่มาก ณ จุดนี้เนื่องจากช่องว่างนั้นเป็นไวรัสที่แพร่กระจายโดย บริษัท ยักษ์ใหญ่ของผู้บริโภคที่เป็นเจ้าของระบบปฏิบัติการและตอนนี้เป็นไปไม่ได้ที่จะหลีกเลี่ยง
ช่องว่างทำให้การระบุชื่อไฟล์ในบรรทัดคำสั่ง ฯลฯ ที่น่าอึดอัดใจ เกี่ยวกับมัน. อักขระที่ห้ามใช้อย่างเด็ดขาดในระบบ * nix คือ NUL (ไม่ต้องกังวลไม่ได้อยู่บนแป้นพิมพ์ของคุณหรือบุคคลอื่น) และ/
เนื่องจากเป็นตัวแยกพา ธ 1 นอกจากสิ่งอื่น ๆ องค์ประกอบพา ธ ส่วนบุคคล (ชื่อไฟล์) ถูก จำกัด ไว้ที่ 255 ไบต์ (อาจเกิดความยุ่งยากหากคุณใช้ชุดอักขระแบบขยาย) และพา ธ ที่สมบูรณ์ถึง 4 KiB
หรือนี่เป็นเพียงเรื่องของการตั้งค่าส่วนตัว
ฉันจะบอกว่ามันเป็น ของ DE ส่วนใหญ่ดูเหมือนจะสร้างการฆ่าของไดเรกทอรีทุนในของคุณ$HOME
( Downloads
, Desktop
, Documents
- The D
เป็นที่นิยมมาก) จึงไม่มีอะไรแปลกประหลาดเกี่ยวกับมัน นอกจากนี้ยังมีไฟล์แบบดั้งเดิมเป็นเรื่องธรรมดามากกับเมืองหลวงในพวกเขาเช่นและ.Xclients
.Xauthority
คุณค่าของการใช้ประโยชน์จากสิ่งต่าง ๆ ที่จุดเริ่มต้นคือเมื่อมีการระบุรายการในพจนานุกรมศัพท์พวกเขาจะมาก่อนสิ่งเล็ก ๆ น้อย ๆ - อย่างน้อยมีเครื่องมือมากมายและขึ้นอยู่กับสถานที่
ฉันเป็นแฟนของกรณีอูฐ (aka. camelCase) และใช้กับชื่อไฟล์เช่น/home/goldilocks/blueSuedeShoes
- ไม่ต้องสนใจสิ่งที่อยู่ในนั้น เป็นเรื่องของความชอบส่วนตัวอย่างแน่นอน แต่มันก็ยังทำให้ฉันเศร้าใจ
ไฟล์คลาส Java มักจะมีตัวพิมพ์ใหญ่โดยธรรมชาติเพราะชื่อคลาส Java ทำ และแน่นอนว่าอย่าลืมNetworkManager
แม้ว่าเราบางคนจะชอบ
1. มีตัวคั่นเพิ่มเติมที่แนะนำโดย POSIX "ชุดอักขระชื่อไฟล์แบบพกพา"ที่ไม่มีพื้นที่ - แต่รวมถึงตัวพิมพ์ใหญ่! POSIXยังระบุข้อ จำกัด ทั่วไปเพิ่มเติมเกี่ยวกับ "ตัวอักษรเฉือนและไบต์โมฆะ" ที่อื่น ๆ ในเอกสารเดียวกัน นี้สะท้อนให้เห็นหรือจะสะท้อนให้เห็นในยืนเป็นเวลานานการปฏิบัติทั่วไป
README
และMakefile
และอื่น ๆ
เหตุผลหนึ่งที่ต้องหลีกเลี่ยงตัวพิมพ์ใหญ่ในชื่อไฟล์คือลำดับการเรียงใน Unix นั้นคำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กดังนั้นไฟล์ที่ขึ้นต้นด้วยตัวพิมพ์ใหญ่จะไม่ปรากฏ นั่นเป็นเหตุผลว่าทำไมMakefile
มักจะตั้งชื่อโดยใช้ทุนM
- มันเป็นหนึ่งในไฟล์ที่คุณต้องการที่จะเห็นเป็นครั้งแรกโดยไม่ต้องเลื่อน / a-l
ข้ามรางลง
สิ่งนี้กล่าวว่าคุณสามารถทำได้แย่กว่ามากในแง่ของชื่อไฟล์:
-
อาจทำให้เกิดปัญหาได้หลายโปรแกรมจะเห็นว่าเป็นตัวเลือกบรรทัดคำสั่งแทนที่จะเป็นชื่อไฟล์ (เช่นrm -r
จะไม่ลบไฟล์ที่มีชื่อ-r
).
จะซ่อนมันจากยูทิลิตี้มากมายและเชลล์ globbing (เช่นrm *
จะไม่ลบไฟล์เช่น.config
)|<>*?
และแม้กระทั่งอักขระที่ไม่สามารถพิมพ์ได้เช่นnewline
เป็นไปได้ทางเทคนิค แต่อาจแบ่งสคริปต์ / โปรแกรมที่คล้ายกับอักขระช่องว่าง ความแตกต่างก็คือมักใช้อักขระช่องว่างดังนั้นโปรแกรมเมอร์จึงมักทดสอบโปรแกรมของตนกับมันในขณะที่ตัวละครที่ได้รับความนิยมน้อยมักจะไม่ถูกทดสอบrm *
จะไม่ลบไฟล์เช่น.config
?
Makefile
และREADME
เป็นตัวอย่างที่สมบูรณ์แบบ โปรดทราบว่าเอฟเฟ็กต์นี้จะไม่สำคัญหากตัวอักษรไม่ใช่ตัวอักษรตัวแรกในชื่อดังนั้นจึงไม่ใช่เรื่องใหญ่หากคุณใช้ camelCase แน่นอนว่าคุณอาจแปลกใจที่เห็นanOctagon
ก่อนหน้าangle
นี้ แต่อย่างน้อยพวกเขาจะอยู่ด้วยกันในรายชื่อ
หากคุณกำลังจะเชื่อมต่อกับสภาพแวดล้อมของ Windows คุณควรหลีกเลี่ยงตัวพิมพ์ใหญ่เนื่องจาก Windows จะลดทุกอย่างลง นี่เป็นปัญหาที่เกิดขึ้นบ่อยกว่า ลิงก์ที่Page_2.html
จะค้นหาpage_2.html
ใน Windows แต่จะล้มเหลวใน Unix
NUL
และ/
สิ่งต้องห้าม
cat > Foo
foo
ลักษณะการทำงานนี้มีแนวโน้มที่จะไม่คาดคิดและสร้างความสับสนหากคุณใช้ในการรักษาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ - เล็กเช่น ext *
\0
และคำนึงถึงขนาดตัว/
พิมพ์) อย่างน้อยนั่นก็เป็นวิธีที่ฉันจำได้ แต่ฉันเห็นด้วยว่ามันเป็นเรื่องที่ยุ่งเหยิง มีข้อ จำกัด เพิ่มเติมใน ...
เหตุผลหนึ่งที่หลีกเลี่ยงตัวพิมพ์ใหญ่คือbash
tabcompletion นั้นคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่(อย่างน้อยก็เป็นค่าเริ่มต้น) - มันยังทำให้ฉันเดินทางทุกครั้งที่ฉันจบbash
ด้วยการตั้งค่าเริ่มต้น แน่นอนว่ามีเชลล์ยอดนิยมอื่น ๆ แต่สิ่งนี้รวมกับความจริงที่ว่าbash
เชลล์การเข้าสู่ระบบเริ่มต้นในหลาย ๆ OS หมายความว่าค่าเริ่มต้นนั้นมักจะเสร็จสิ้นทุกกรณี การใช้ชื่อไฟล์ตัวพิมพ์เล็กทั้งหมดจะทำให้สิ่งต่าง ๆ ง่ายขึ้น
echo set completion-ignore-case On >> ~/.inputrc
สามารถช่วยเล็กน้อยอย่างน้อยในระบบของคุณเอง
Foo
และพิมพ์ในภายหลังcat f
(Tab) ไฟล์นั้นจะล้มเหลว แต่สิ่งเดียวกันที่เกิดขึ้นถ้าคุณพิมพ์cat foo
, cat Foobar
หรือcat Fu
- ความจริงที่ว่าคุณจะมีปัญหาในการเข้าถึงไฟล์ที่มีชื่อที่คุณจำไม่ได้อย่างถูกต้องไม่ได้จริงๆมีอะไรจะทำอย่างไรกับการเติมข้อความอัตโนมัติ
เนื่องจาก NL_Derek เปิดเวิร์มกระป๋องนี้ แต่ไม่ได้ประกบอย่างถูกต้องฉันจะพูดแบบนี้:
มันตกลงที่จะใช้ตัวอักษรทุน แต่คุณควรหลีกเลี่ยงการสร้างไฟล์ (ในไดเรกทอรีเดียวกัน) ที่แตกต่างเท่านั้นโดยกรณีเช่นFile_Name.txt
และ file_name.txt
เพราะ
FILENA~1.TXT
และFILENA~2.TXT
- dir /x
เพื่อดูว่าชื่อสั้น ๆ (ถ้ามี) ไปกับชื่ออะไรยาว ๆ )cmd1 > foo
cmd2 > Foo
cmd2
นอกเหนือจากเหตุผลทางเทคนิคแล้วฉันมีแง่มุมที่สามารถนำไปใช้ได้จริง การใช้ตัวอักษรตัวพิมพ์เล็กจะทำให้มั่นใจได้ว่าการค้นหาจะง่ายขึ้นหากไม่มีใครชอบใช้ grep -i หรือหา -i บางครั้งแม้แต่ camelCase อาจสร้างความสับสนได้หากต้องใช้สตริงของคำที่เป็นกรณีเช่นเดียวกับใน storageNYCDCPrimary ดังนั้นฉันคิดว่ามันดีที่สุดที่จะติดกับตัวพิมพ์เล็กและพริกไทยด้วยขีดล่างหรือเครื่องหมายขีดกลางเพื่อให้อ่านง่ายเช่น storage_nyc_dc_primary
storageNycDcPrimary
และStorageNycDcPrimary
ทั้งคู่ก็แปลกที่จะอ่าน
ฉันจะพิจารณามันเป็นวิธีที่ดีที่สุดที่จะหลีกเลี่ยงการใช้ตัวพิมพ์ใหญ่และช่องว่างในชื่อไฟล์
บางคนจะบอกว่าพวกเขาไม่เห็นด้วย แต่มันเป็นเรื่องหรือสิ่งที่ฉันเรียกว่าความเชื่อทางศาสนา : ยากที่จะพูดคุยและตกลง ผู้ที่ไม่เห็นด้วยบอกว่าเครื่องมือส่วนใหญ่ได้รับการแก้ไขแล้วให้เป็นเมืองหลวงและพื้นที่เป็นมิตร: พวกเขาพูดถูก แต่ก็ไม่ใช่คำถาม
คำถามที่ถูกต้องคือคุณต้องใช้ตัวพิมพ์ใหญ่และช่องว่างในชื่อไฟล์เท่าใด คำถามนี้ยกเว้นเมื่อฉันกำลังเขียนโปรแกรมใน Java คำตอบคือส่วนใหญ่ตลอดเวลา: ฉันไม่จำเป็นต้องเมืองหลวงและช่องว่างในชื่อไฟล์ของฉัน ช่องว่างทั้งหมดที่ฉันแทนที่ด้วยเครื่องหมายขีดล่าง ( _
) หรือเครื่องหมายลบ ( -
) และเพราะเหตุนี้ฉันจึงไม่ใช้กรณีอูฐ (aka. camelCase) ที่ตรงกันข้ามกับศาสนาอื่น
หลายคนเรียกพล่ามมาหาฉันเพื่อทำและสอนว่า - บางคนยังทำอยู่ - บางคนสะดุดเครื่องมือที่ไม่เป็นทุน / เป็นมิตรกับอวกาศและมาหาฉันโดยบอกว่าฉันพูดถูกและควรฟังฉัน ทำสิ่งที่คุณต้องการและถ้าคุณใช้ตัวพิมพ์ใหญ่และช่องว่างในชื่อไฟล์ฉันหวังว่าคุณจะไม่เดินทางบนเครื่องมือที่เขียนไม่ดี อย่างไรก็ตามหากคุณเดินทางด้วยเครื่องมือดังกล่าวหวังว่าจะไม่ยากที่จะแก้ไขและจะไม่ทำให้ธุรกิจของคุณและ / หรือคุณต้องเสียเงินและ / หรือเวลามาก แต่ถ้ามันจบลงด้วยผลสะท้อนที่ไม่ดีคุณจะจำได้ว่าบางคนบอกคุณในอดีตว่าการใช้ตัวพิมพ์ใหญ่และช่องว่างในชื่อไฟล์เป็นการฝึกฝนที่ไม่ดี
และสุดท้ายสิ่งหนึ่งถ้าคุณต้องการหลีกเลี่ยงปัญหาทั้งหมดไม่มีตัวอักษรพิเศษในชื่อไฟล์ (เฉพาะตัวอักษรตัวเล็กตัวเลขขีดเส้นใต้และ minuses [1]) รายการตัวละครที่ไม่พึงประสงค์นี้ยังรวมถึงตัวละครที่ไม่ใช่ ASCII ทั้งหมด (ใช่, ฝรั่งเศสและคนอื่น ๆ ที่ไม่ใช่ภาษาอังกฤษ - และฉันเป็นหนึ่งในพวกเขา - ไม่มีเหล่านั้น: à, â, ä, ç, é, ... , ö, æ, œ , ... ) นอกจากนี้ยังขยายไปถึงสิ่งอื่น ๆ อีกมากมายรวมทั้งการเข้าสู่ระบบและรหัสผ่าน ฉันจะให้คุณเดาว่าเกิดอะไรขึ้นเมื่อคุณใส่เครื่องหมายคำพูดหรือเครื่องหมายคำพูดคู่ ( '
หรือ"
) ในการเข้าสู่ระบบหรือรหัสผ่านที่จัดการโดยสคริปต์ทุบตีที่ไม่ได้เขียนโดย sysadmin ที่ยืนยันแล้ว ....
[1]: บางทีเราอาจจะขยายว่า~
, @
, #
และคนอื่น ๆ แต่นี้เป็นปัญหาในการมองหา (และใช่ฉันรู้เกี่ยวกับไฟล์ emacs ... )