Di mana saya dapat menemukan daftar karakter yang diperbolehkan dalam nama file, bergantung pada sistem operasinya? (mis. di Linux, karakter :
diperbolehkan dalam nama file, tetapi tidak di Windows)
Di mana saya dapat menemukan daftar karakter yang diperbolehkan dalam nama file, bergantung pada sistem operasinya? (mis. di Linux, karakter :
diperbolehkan dalam nama file, tetapi tidak di Windows)
Jawaban:
Anda harus mulai dengan halaman Nama File Wikipedia . Ini memiliki tabel berukuran layak ( Perbandingan batasan nama file ), mencantumkan karakter yang dicadangkan untuk cukup banyak sistem file.
Ia juga memiliki sejumlah besar informasi lain tentang setiap sistem file, termasuk nama file yang dicadangkan seperti di CON
bawah MS-DOS. Saya menyebutkan itu hanya karena saya pernah digigit oleh itu ketika saya mempersingkat file include dari const.h
menjadi con.h
dan menghabiskan setengah jam untuk mencari tahu mengapa kompiler hang.
Ternyata DOS mengabaikan ekstensi untuk perangkat sehingga con.h
persis sama dengan con
, konsol input (artinya, tentu saja, kompilator menunggu saya untuk mengetikkan file header sebelum melanjutkan).
POSIX "Fully portable filenames"
entri, yang mencantumkan ini:A–Z a–z 0–9 . _ -
Oke, jadi lihat Perbandingan sistem file jika Anda hanya peduli tentang sistem file pemain utama:
NUL
, \
, /
, :
, *
, "
, <
, >
, |
. Juga, tidak ada karakter spasi di awal atau akhir, dan tidak ada titik di akhir .:
atau/
NUL
atau/
sehingga setiap byte kecuali NUL
, \
, /
, :
, *
, "
, <
, >
, |
dan Anda tidak dapat memiliki file / folder menelepon .
atau ..
dan tidak ada karakter kontrol (tentu saja).
/
. Windows tidak mengizinkan garis miring terbalik dan beberapa string (misalnya CON
).
:
s dalam namanya.
Lebih tepatnya tentang Mac OS X (sekarang disebut MacOS) /
di Finder diinterpretasikan ke :
dalam sistem file Unix.
Ini dilakukan untuk kompatibilitas mundur saat Apple pindah dari Classic Mac OS.
Adalah sah untuk menggunakan /
dalam nama file di Finder, melihat file yang sama di terminal itu akan muncul dengan :
.
Dan cara kerjanya juga sebaliknya: Anda tidak dapat menggunakan a /
di nama file dengan terminal, tetapi a :
tidak masalah dan akan muncul sebagai a /
di Finder.
Beberapa aplikasi mungkin lebih membatasi dan melarang kedua karakter untuk menghindari kebingungan atau karena mereka menyimpan logika dari Mac OS Klasik sebelumnya atau untuk kompatibilitas nama antar platform.
Untuk nama file "bahasa Inggris", ini berfungsi dengan baik. Saya menggunakan ini untuk membersihkan nama file yang diunggah. Nama file tidak dimaksudkan untuk ditautkan ke apa pun di disk, itu untuk saat file sedang diunduh maka tidak ada pemeriksaan jalur.
$file_name = preg_replace('/([^\x20-~]+)|([\\/:?"<>|]+)/g', '_', $client_specified_file_name);
Pada dasarnya ini menghapus semua karakter yang tidak dapat dicetak dan dicadangkan untuk Windows dan OS lainnya. Anda dapat dengan mudah memperluas pola untuk mendukung lokal dan fungsi lain.
Berikut adalah kode untuk membersihkan nama file di python.
import unicodedata
def clean_name(name, replace_space_with=None):
"""
Remove invalid file name chars from the specified name
:param name: the file name
:param replace_space_with: if not none replace space with this string
:return: a valid name for Win/Mac/Linux
"""
# ref: https://en.wikipedia.org/wiki/Filename
# ref: /programming/4814040/allowed-characters-in-filename
# No control chars, no: /, \, ?, %, *, :, |, ", <, >
# remove control chars
name = ''.join(ch for ch in name if unicodedata.category(ch)[0] != 'C')
cleaned_name = re.sub(r'[/\\?%*:|"<>]', '', name)
if replace_space_with is not None:
return cleaned_name.replace(' ', replace_space_with)
return cleaned_name
:return: a valid name for Win/Mac/Linux
tidak benar dalam semua keadaan.