Apakah praktik yang buruk untuk nama folder mengandung dot (.)? Bagaimana dengan nama file dengan banyak titik?

28

Kadang-kadang masuk akal secara praktis untuk nama folder mengandung titik (.). Misalnya, Anda menyimpan data untuk percobaan yang dilakukan pada L = 0,5. Jadi folder tersebut mungkin dinamai:

experiment_L0.5

Masalah serupa mungkin muncul untuk nama file. Sebagai contoh:

file_L0.5.txt

Bekerja di Ubuntu, apakah ini praktik buruk? Bagaimana kalau berbagi direktori ini dengan pengguna Windows?

Terima kasih!

Hamid
sumber
5
Jika titik adalah karakter pertama, folder akan disembunyikan. Selain itu, saya pikir itu tidak penting.
user3121023

Jawaban:

37

Sejauh yang saya tahu tidak ada masalah dengan penamaan folder dan file dengan satu atau beberapa titik.

Ubuntu umumnya tidak menggunakan titik dan tiga karakter (seperti .txt) untuk mengidentifikasi jenis file. Jadi ini tidak memiliki arti khusus dalam konteks Ubuntu. Ini berguna saat berbagi file dengan Windows. Ubuntu menggunakan Angka Ajaib dalam beberapa byte pertama file untuk mengidentifikasi jenis file. Namun, Nautilus. mengabaikan angka ajaib jika ekstensi dot dan tiga karakter tersedia untuk mengidentifikasi jenis file. Pengaturan ini dapat diubah. Lihat Memaksa nautilus untuk mengabaikan ekstensi

Di Ubuntu, memulai nama file atau folder dengan titik, seperti .experiment_L0.5, membuat file atau folder disembunyikan. Anda dapat mengubah tampilan file tersembunyi dengan menekan Ctrl+ Hdi Nautilus. Di Windows nama file dimulai dengan a. tidak disembunyikan. Jadi jika Anda mentransfer file tersembunyi yang dinamai .experiment_L0.5ke sistem Windows itu akan terlihat jelas.

Di Ubuntu, nama file dapat diakhiri dengan sebuah titik karena tidak memiliki makna khusus di bagian akhir. Namun, di Windows titik memisahkan nama file dan ekstensi, dan nama file berakhir dengan titik tetapi tidak ada ekstensi yang tidak diizinkan. Ketika saya mencoba membuat file seperti itu di Windows, saya mendapatkan file hanya dengan nama, tanpa titik, tanpa ekstensi.

Referensi: Wiki pada Nama File

Semoga ini membantu.

pengguna68186
sumber
4
Ini benar. Jika Anda berbagi file dengan windows, Anda harus menghindari :char colon , ilegal di nama file windows, yang akan menimbulkan masalah ( dan itu memang ). Lihat juga di sini .
Rmano
Terima kasih @Rmano. Saya telah menambahkan tautan ke wiki dalam jawaban saya.
user68186
1
Berbicara tentang kompatibilitas, saya pikir bahwa trailing dot (seperti fname.) tidak diperbolehkan di Windows juga.
Rmano
Terima kasih lagi @Rmano. Saya menjalankan beberapa tes cepat dan gagal membuat file bernama test.Windows. Saya akan memperbarui jawaban saya.
user68186
1
Untuk menambahkan komentar Rmano - ini bisa menjadi masalah di Ubuntu jika Anda memiliki drive Windows yang dipasang melalui VirtualBox. Mencoba mkdir nama dengan titik tambahan gagal dengan 'Kesalahan protokol'.
bvanlew
11

Jawaban singkatnya

  • Windows tidak mengizinkan karakter berikut: <>:"/\|?*( sumber )
  • Lebih banyak karakter yang berkecil hati adalah: space dan dot .( sumber )
    • Alat baris perintah lebih sulit digunakan ketika Anda memiliki spasi dalam nama (lebih sulit, bukan tidak mungkin)
    • Dots digunakan dalam RegEx (mis. Ketika Anda ingin menggunakan grep). Titik terkemuka membuat file disembunyikan oleh konvensi di Linux. Di Windows, titik digunakan dalam ekstensi file, yang digunakan untuk deteksi tipe file.
  • Jendela juga tidak akan mengizinkan nama file CON, PRN, AUX, CLOCK$, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, dan LPT9. ( sumber )
  • Satu-satunya karakter yang tidak diizinkan dalam sistem file Unix yang saya tahu adalah /dan null (byte nol, \0).
  • Lihat juga: Batas sistem file (Saya tidak tahu Windows mana yang Anda inginkan agar kompatibel).

Jawaban panjangnya

Latar belakang teknis: Sistem File

Ubuntu memanfaatkan ext4sistem file. Sistem file melacak di mana file disimpan pada penyimpanan yang mendasarinya (disk atau SSD atau apa pun), izin dalam bentuk pemilik / grup / lainnya dapat membaca / menulis / mengeksekusi, cap waktu, nama.

Sistem file menyusun penyimpanan yang tersedia. Blok pertama disebut "superblock". Blok ini digunakan untuk me-mount sistem file. Sejauh yang saya tahu, setiap sistem file modern membagi ruang dalam blok. Saya pikir (dan saya tidak terlalu yakin tentang itu) bahwa sebagian besar sistem file juga memiliki ukuran blok tetap, meskipun ukuran blok dapat dikonfigurasikan ketika sistem file dibuat. ext4 (dan juga ext2 dan ext3) memanfaatkan apa yang disebut "inode" untuk file dan direktori. Inode tersebut berisi pointer ke blok lain (yang mungkin juga berupa inode atau menjadi "blok data"). Dan inode "pertama" dari suatu file berisi semua informasi yang saya sebutkan di atas.

Satu informasi lain adalah "tipe" dari file tersebut. "Jenis" dapat:

  • file biasa
  • direktori
  • file perangkat (perangkat blok atau karakter)
  • ...

Bahkan, Anda juga dapat membuka direktori dengan editor:

vim /home

Karena direktori tidak mengandung path lengkap, tetapi hanya nama-nama konten, saya tidak melihat alasan mengapa file tidak dapat berisi a /. Saya kira itu mungkin kenyamanan. (Adakah yang tahu mengapa /tidak diizinkan?)

Namun, masalahnya berbeda untuk sistem file lain. FAT16 dan FAT32 menggunakan apa yang disebut "tabel alokasi file". Ini berarti ada tabel yang berisi semua file yang disimpan di file Anda, di mana "cluster" mereka mulai dan di mana cluster mereka berakhir sebagai daftar yang terhubung secara tunggal.

Hal penting yang ingin saya sampaikan adalah bahwa karakter yang tidak diizinkan mungkin juga tergantung pada sistem file.

Latar belakang teknis: Jenis File

  • Windows menggunakan ekstensi file untuk mendeteksi tipe file
  • Linux menggunakan "Magic Bytes" untuk mendeteksi tipe file. Magic Bytes adalah bagian dari konten file dan karenanya sepenuhnya independen dari namanya. Bytes ini adalah bagian dari spesifikasi tipe file (lihat spesifikasi png sebagai contoh). Itu juga menggunakan ekstensi nama file untuk file dengan byte ajaib yang sama seperti .txtatau .html(keduanya adalah file teks).

Terkait

Martin Thoma
sumber
Dugaan Anda mengenai bagaimana FAT menyimpan nama file tidak benar: en.wikipedia.org/wiki/FAT32#File_Allocation_Table - "FAT" yang sebenarnya menyimpan daftar cluster , sementara direktori menyimpan daftar nama file dengan pointer ke cluster pertama dari file, mirip dengan bagaimana Anda menggambarkan ext4. :) Juga, .txtdan .htmlfile memang memiliki "nilai ajaib" yang berbeda - coba ganti nama file html ke test.txtdan jalankan file test.txt. Itu tidak memiliki banyak relevansi dengan pertanyaan awal, tapi masih :)
Sergey
1
Terima kasih, saya telah menghapus bagian yang salah tentang FAT. tentang nilai-nilai ajaib dan file: filetidak hanya menggunakan nilai-nilai ajaib untuk menentukan jenis file. Setiap file HTML yang valid adalah file teks (dalam arti bahwa itu berisi karakter yang dapat dibaca), tetapi tidak setiap file teks yang valid adalah file HTML yang valid (dalam arti bahwa itu divalidasi terhadap validator W3C). Jadi cukup banyak jenis file (html, xml, csv, js, php, c, h, cpp, ...) sebenarnya adalah file teks. Hanya file biner yang memiliki byte ajaib yang berada pada posisi yang ditentukan dengan baik. Semua file yang saya sebutkan di atas dapat memiliki spasi kosong sebelum konten.
Martin Thoma
5

Demi kelengkapan, nama-nama yang hanya terdiri dari satu titik .atau dua titik ..adalah spesial:

  • . merujuk ke direktori saat ini
  • .. merujuk ke direktori induk

Entri-entri itu ditambahkan secara otomatis dan selalu ada, sehingga Anda tidak dapat memiliki file dengan nama .atau ...

Sergey
sumber
Poin bagus. Ini berlaku untuk Windows dan Ubuntu.
user68186
1

Ini tidak masalah, tidak di linux atau di windows.

Ini adalah praktik umum untuk memiliki folder bernama "program.d" - untuk menyimpan konfigurasi dan hal-hal untuk suatu program (lihat di direktori / etc)

Ohad Cohen
sumber
0

Penamaan file sangat fleksibel di Unix, sistem file Linux. Satu-satunya nama file yang tidak dapat Anda miliki adalah karakter nol atau yang berisi /nama. Tetapi tentu akan menjadi praktik yang baik untuk menghindari penggunaan karakter yang dilarang / dicadangkan di sistem lain dari sudut pandang nama-portabilitas; seperti Anda tidak boleh menggunakan " * : < > ? \ / |karakter apa pun (dibatasi oleh NTFS) dalam nama file Anda jika Anda ingin mengakses file di sistem Windows.

Dan tentang menggunakan .(periode) dalam nama-file , saya pikir itu harus baik-baik saja karena tampaknya tidak menjadi karakter "dicadangkan" di salah satu sistem (kecuali untuk OpenVMS, MS-DOS dan Windows di mana penggunaannya dalam nama file / direktori diperbolehkan tetapi kejadian terakhir akan ditafsirkan sebagai pemisah ekstensi dalam VMS, MS-DOS dan Windows) sebagaimana disebutkan dalam tautan Wikipedia yang berikut:

Dalam sistem lain, biasanya dianggap sebagai bagian dari nama file, dan lebih dari satu periode dapat diizinkan. Di Unix, periode terkemuka berarti file atau folder biasanya disembunyikan.

tepat
sumber