Setelah menggunakan sistem Windows untuk waktu yang lama, saya tahu bahwa pada titik tertentu, jendela kesalahan dapat muncul ketika file dan nama folder menjadi terlalu panjang.
Ini terjadi pada saya ketika saya mencoba untuk membuat cadangan file dengan SFTP dari server ke folder di (misalnya):
D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png
Seperti yang Anda lihat, saya cenderung membangun path folder yang sangat spesifik kadang-kadang dan jika nama file terlalu panjang, NTFS mungkin tidak dapat menyimpannya dengan cara ini.
Saat ini saya mengkhawatirkan cadangan fisik saya, karena jalur folder pada drive cadangan saya akan ditambahkan /backups/(drive name)/...
ke semua jalur file.
Apakah ada batasan seperti itu (atau yang serupa) di ext4 / Ubuntu yang harus saya perhatikan?
files
filesystem
directory
filename
Prototipe700
sumber
sumber
Jawaban:
Panjang nama file maks adalah 255 byte. Ditemukan di halaman wiki untuk ext4 .
Dan jalur maksimum 4096 karakter. Ditemukan dalam Pertanyaan SE Unix & Linux ini .
Meskipun, saya menemukan artikel wiki ini yang tidak menentukan path file maks di ext4.
sumber
jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -c 7 jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -m 7
-m menghitung karakter dan -c menghitung byte. Alasan mengapa itu adalah 7 bukannya 6 adalah karakter garis akhir yang tidak dicetak. Jadi total karakter dalam nama file akan menjadi 255.4
untukecho -n "💩" | wc -c
. Membuat nama file yang disebut dengan nama itu akan memakan waktu 4 byte meskipun fakta bahwa nama file ini adalah 1 grapheme panjang. "Karakter" tidak jelas konsep (biasanya berarti byte, grapheme atau titik kode UNICODE).len(filename.encode())
.Saya percaya bahwa cara yang paling dapat diandalkan untuk menentukan ini adalah dengan
pathconf(".", _PC_PATH_MAX);
fungsi POSIX, yang menentukan jalur maksimum untuk jalur yang diberikan.Seperti fungsi yang disarankan, ini dapat bervariasi antar sistem file.
Saya tidak tahu utilitas baris perintah yang memaparkannya. Berikut adalah contoh C minimal: /programming/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c / 54155296 # 54155296
sumber
Batas pathname tergantung pada sistem file yang digunakan. Jawaban jtoscarson mencakup ext4 yang merupakan default pada Ubuntu, namun Anda dapat menggunakan berbagai filesystem di Ubuntu. Untuk mengutip jawaban WerkkreW di serverfault, berikut adalah beberapa filesystem dan batasannya:
Perhatikan juga bahwa berbagai sistem file memiliki keterbatasan untuk jenis karakter apa yang dapat hadir dalam nama file. Misalnya, nama file dalam
ext4
tidak boleh mengandung NULL dan/
. Lihat juga, artikel Wikipedia untuk perbandingan sistem file .Perhatikan juga bahwa sistem file Linux harus mempertimbangkan definisi POSIX :
Dari limit.h :
sumber
Seperti yang dikatakan @ sergiy-kolodyazhnyy, panjang nama file maksimum akan tergantung pada sistem file dan sebagian besar batas panjang nama file hingga 255 byte.
Kelalaian penting dari bagannya adalah media optik. Sementara ekstensi UDF dan Rock Ridge memiliki batas 255 karakter yang sama untuk nama file, ISO9660 tanpa Rock Ridge dan Joliet keduanya memiliki batas yang jauh lebih ketat sehingga Anda mungkin benar-benar akan menghadapi kesulitan jika Anda melakukan sesuatu seperti membuat cadangan
youtube-dl
unduhan.Nama file Joliet terbatas pada 64 titik kode UTF-16 atau 103 jika program penguasaan disk Anda memiliki opsi untuk keluar dari spesifikasi dengan cara yang tampaknya tidak membahayakan praktik.
Demikian juga, ISO 9660 Level 2 & 3, tanpa ekstensi Rock Ridge, terbatas pada nama file 31 karakter atau 37 jika Anda bermain cepat dan longgar dengan spek.
ISO 9660: 1999, yang merupakan didukung oleh genisoimage tetapi tidak oleh frontends seperti K3b, memiliki batas baik 207 bytes (tanpa Rock Ridge) atau 197 byte (dengan Rock Ridge).
(Sumber: Halaman
genisoimage
manual)Adapun panjang jalur maksimum , itu kesalahpahaman besar. Tidak ada satu untuk kebanyakan sistem file Linux.
Ada konstan bernama
PATH_MAX
, tapi itu hanya maksimal untuk API POSIX tertentu , yang dapat Anda bekerja di sekitar .Satu-satunya konsekuensi konsekuensi terhadap konvensi "tidak ada batas panjang lintasan" ini adalah FAT32 dan exFAT (32.760 karakter Unicode), NTFS dan ReFS (32.767 karakter Unicode), UDF (1.023 byte), dan ISO 9660 (tidak jelas, tetapi saya pernah melihat itu dinyatakan sebagai 180, 207, 212, atau 222 byte).
Ini dapat dengan mudah ditunjukkan dengan menjalankan program Python kecil ini dan kemudian menjelajahi direktori yang dihasilkan.
My
bash
, yang menampilkan seluruh path pada prompt, akan mengalami masalah dengannya. Namun sayazsh
, yang hanya menampilkan folder saat ini di prompt tidak akan mengalami masalah dan bahkan memilikipwd
builtin yang dapat menampilkan seluruh 5000 + -byte path tanpa masalah.sumber