Karakter apa yang dilarang dalam nama direktori Windows dan Linux?

356

Saya tahu bahwa / itu ilegal di Linux, dan berikut ini ilegal di Windows (saya pikir) * . " / \ [ ] : ; | ,

Apa lagi yang saya lewatkan?

Saya membutuhkan panduan komprehensif, dan yang memperhitungkan karakter bita-ganda. Menghubungkan ke sumber daya luar tidak masalah dengan saya.

Pertama-tama saya perlu membuat direktori pada sistem file menggunakan nama yang mungkin mengandung karakter terlarang, jadi saya berencana untuk mengganti karakter tersebut dengan garis bawah. Saya kemudian perlu menulis direktori ini dan isinya ke file zip (menggunakan Java), jadi saran tambahan tentang nama direktori zip akan dihargai.

Jeff
sumber
13
Beberapa karakter yang Anda sebutkan sebenarnya diizinkan di Windows. Lihat ini:echo abc > "ab.;,=[1]"
dolmen
3
Juga jangan lupa <dan> ilegal di Windows.
AnotherParker
4
Saya tidak ilegal di Linux. Anda hanya perlu menghindarinya dengan \ saat mengetiknya.
David C. Bishop
5
@ DavidC.Bishop: Posting SO ini menegaskan bahwa kernel Linux akan mencegah Anda bekerja dengan nama file yang mengandung slash. Apakah Anda bisa membuatnya bekerja?
Soren Bjornstad
14
"Saya tidak ilegal di Linux. Anda hanya perlu menghindarinya dengan \ ketika mengetiknya" - pernyataan ini sepenuhnya salah. komponen nama file tidak boleh mengandung /, dan meloloskannya tidak berpengaruh.
Jim Balter

Jawaban:

215

"Panduan komprehensif" untuk karakter nama file terlarang tidak akan berfungsi di Windows karena ia menyimpan nama file dan karakter. Ya, karakter seperti * " ?dan yang lain dilarang, tetapi ada sejumlah nama tak terbatas yang hanya terdiri dari karakter yang sah yang dilarang. Misalnya, spasi dan titik adalah karakter nama file yang valid, tetapi nama yang hanya terdiri dari karakter tersebut dilarang.

Windows tidak membedakan antara karakter huruf besar dan huruf kecil, jadi Anda tidak dapat membuat folder dengan nama Ajika salah satu nama asudah ada. Lebih buruk, nama-nama yang tampaknya diizinkan seperti PRNdan CON, dan banyak lainnya, dicadangkan dan tidak diizinkan. Windows juga memiliki beberapa batasan panjang; nama file yang valid dalam satu folder dapat menjadi tidak valid jika dipindahkan ke folder lain. Aturan untuk menamai file dan folder ada di Microsoft docs.

Anda tidak dapat, secara umum, menggunakan teks yang dibuat pengguna untuk membuat nama direktori Windows. Jika Anda ingin memungkinkan pengguna untuk nama apa saja yang mereka inginkan, Anda harus membuat nama-nama yang aman seperti A, AB, A2et al., Toko nama user-generated dan jalan setara dalam file data aplikasi, dan melakukan pemetaan jalur dalam aplikasi Anda.

Jika Anda benar-benar harus mengizinkan nama folder yang dibuat pengguna, satu-satunya cara untuk mengetahui apakah mereka tidak valid adalah dengan menangkap pengecualian dan menganggap nama itu tidak valid. Bahkan itu penuh dengan bahaya, seperti pengecualian untuk akses yang ditolak, drive offline, dan ruang drive yang tumpang tindih dengan yang dapat dibuang untuk nama yang tidak valid. Anda membuka satu kaleng besar luka.

Lengkungan Tinggi
sumber
11
Frasa kunci dari tautan MSDN adalah "[dan a] ny karakter lain yang tidak diizinkan sistem file target". Mungkin ada sistem file yang berbeda pada Windows. Beberapa mungkin mengizinkan Unicode, yang lain mungkin tidak. Secara umum, satu-satunya cara aman untuk memvalidasi nama adalah dengan mencobanya di perangkat target.
Adrian McCarthy
72
Ada beberapa pedoman, dan "ada sejumlah nama tak terbatas yang hanya terdiri dari karakter yang sah yang dilarang" tidak konstruktif. Demikian juga "Windows tidak membedakan antara huruf besar dan huruf kecil" adalah pengecualian bodoh - OP bertanya tentang sintaks dan bukan semantik, dan tidak ada orang yang berpikiran benar akan mengatakan bahwa nama file seperti A.txttidak valid karena a.TXTmungkin ada.
Borodin
9
COPY CON PRNberarti membaca dari input keyboard, atau mungkin stdin, dan menyalinnya ke perangkat printer. Tidak yakin itu masih berlaku di windows modern, tetapi tentu untuk waktu yang lama. Di masa lalu Anda bisa menggunakannya untuk mengetik teks dan memiliki printer dot-matrix cukup output saja.
AntonPiatek
6
"Tidak konstruktif" - sebaliknya, itu fakta. Yang tidak konstruktif adalah pertikaian Borodin.
Jim Balter
3
"Secara umum, Anda tidak dapat menggunakan teks yang dibuat pengguna untuk membuat nama direktori Windows." <- Jika Anda ingin melakukan ini, Anda hanya dapat memiliki daftar putih karakter dan itu sebagian besar akan berfungsi, jika Anda dapat mengabaikan masalah yang sudah ada.
Casey
533

Mari kita tetap sederhana dan jawab pertanyaannya, pertama.

  1. The dilarang karakter ASCII dicetak adalah:

    • Linux / Unix:

      / (forward slash)
      
    • Windows:

      < (less than)
      > (greater than)
      : (colon - sometimes works, but is actually NTFS Alternate Data Streams)
      " (double quote)
      / (forward slash)
      \ (backslash)
      | (vertical bar or pipe)
      ? (question mark)
      * (asterisk)
      
  2. Karakter yang tidak dapat dicetak

    Jika data Anda berasal dari sumber yang akan mengizinkan karakter yang tidak dapat dicetak maka ada lebih banyak untuk diperiksa.

    • Linux / Unix:

      0 (NULL byte)
      
    • Windows:

      0-31 (ASCII control characters)
      

    Catatan: Walaupun legal di bawah sistem file Linux / Unix untuk membuat file dengan karakter kontrol dalam nama file, itu mungkin menjadi mimpi buruk bagi pengguna untuk menangani file tersebut .

  3. Nama file yang dicadangkan

    Nama file berikut dicadangkan:

    • Windows:

      CON, PRN, AUX, NUL 
      COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
      LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
      

      (baik sendiri dan dengan ekstensi file yang sewenang-wenang, misalnya LPT1.txt).

  4. Aturan lainnya

    • Windows:

      Nama file tidak boleh diakhiri dengan spasi atau titik.

Christopher Oezbek
sumber
5
Sebagian besar sistem file Windows tidak terbatas pada karakter 8-bit. Ada banyak karakter 8-bit lainnya (NUL, karakter kontrol) yang dilarang di Windows. Bahkan mempertimbangkan itu tidak akan memungkinkan si penanya untuk "membuat direktori pada sistem file" saat ia bertanya karena ada jumlah tak terbatas dari nama direktori tidak sah yang terdiri dari karakter yang tidak dilarang.
Dour High Arch
38
Yang lain sudah mengatakan itu dan itu tidak konstruktif. Ketika saya datang ke sini untuk mencari jawaban, saya ingin daftar yang harus saya kumpulkan di tempat lain: Karakter yang harus disaring dari input pengguna saat membuat upaya yang bagus untuk nama file yang valid. Pertanyaan jika karakter bersama-sama menjadi tidak valid, juga perlu beberapa penjelasan.
Christopher Oezbek
5
Karakter NULL juga dilarang di Linux.
Dan Jones
3
Baris baru tidak dilarang di Linux. Saya berpendapat mereka seharusnya, tetapi ... dan jika NUL dilarang di Linux, maka dilarang di Windows, itu memenuhi tujuan yang sama.
Alcaro
11
@ Soaku: tentu saja, tidak, karena dunia tidak berputar di sekitar Microsoft. Mengapa menambahkan batasan yang tidak perlu ketika hanya ada dua karakter yang benar-benar perlu untuk dilarang?
firegurafiku
67

Di Linux dan sistem terkait Unix lainnya, hanya ada dua karakter yang tidak dapat muncul dalam nama file atau direktori, dan itu adalah NUL '\0'dan slash '/'. Slash, tentu saja, dapat muncul dalam nama path, memisahkan komponen direktori.

Rumor 1 mengatakan bahwa Steven Bourne (dari 'shell' ketenaran) memiliki direktori yang berisi 254 file, satu untuk setiap huruf (kode karakter) yang dapat muncul dalam nama file (tidak termasuk /, '\0'; nama .itu direktori saat ini, tentu saja ). Itu digunakan untuk menguji shell Bourne dan secara rutin membuat kekacauan pada program yang tidak waspada seperti program cadangan.

Orang lain telah membahas aturan Windows.

Perhatikan bahwa MacOS X memiliki sistem file case-insensitive.


1 Adalah Kernighan & Pike dalam Praktek Pemrograman yang mengatakan banyak hal dalam Bab 6, Pengujian, §6,5 Tes Tekanan:

Ketika Steve Bourne sedang menulis shell Unix-nya (yang kemudian dikenal sebagai shell Bourne), ia membuat direktori 254 file dengan nama satu karakter, satu untuk setiap nilai byte kecuali '\0'dan memangkas, dua karakter yang tidak dapat muncul di Unix nama file. Dia menggunakan direktori itu untuk semua jenis tes pencocokan pola dan tokenization. (Direktori uji tentu saja dibuat oleh sebuah program.) Selama bertahun-tahun kemudian, direktori itu adalah kutukan dari program file-tree-walking; itu menguji mereka untuk kehancuran.

Perhatikan bahwa direktori harus berisi entri .dan .., jadi itu bisa dibilang 253 file (dan 2 direktori), atau 255 entri nama, bukan 254 file. Ini tidak mempengaruhi keefektifan anekdot, atau pengujian hati-hati yang diuraikannya.

Jonathan Leffler
sumber
1
254 file? Dan bagaimana dengan utf8?
j_kubik
20
254 file semua nama file karakter tunggal, satu per karakter yang diizinkan dalam nama file. UTF-8 bahkan tidak berkilauan di belakang ketika Steve Bourne menulis shell Bourne. UTF-8 memberlakukan aturan tentang urutan byte yang valid (dan melarang byte 0xC0, 0xC1, 0xF5-0xFF sama sekali). Kalau tidak, tidak jauh berbeda - pada tingkat detail yang saya diskusikan.
Jonathan Leffler
1
Pemisah direktori pada disk untuk sistem file MacOS HFS + sebenarnya adalah ':' daripada '/'. OS biasanya (mungkin selalu) melakukan hal yang benar ketika Anda bekerja dengan * nix API. Tapi jangan berharap ini terjadi andal jika Anda pindah ke dunia OSX, misalnya dengan applescript. Sepertinya mungkin API Kakao menggunakan / dan menyembunyikan: dari Anda juga, tapi saya cukup yakin API Karbon lama tidak.
Dan Pritts
@DanPritts Saya membuat skema font / warna khusus di preferensi Xcode, menamakannya dengan /dalam nama. Itu menyebabkan beberapa masalah, karena membuat direktori baru dengan skema masuk
Andreas
Perhatikan bahwa jika direktori memiliki titik dua dalam namanya, Anda tidak dapat menambahkan direktori ke PATHvariabel Unix karena titik dua digunakan sebagai pemisah (titik koma pada Windows). Jadi, program dalam direktori seperti itu harus dijalankan dengan pathname yang menentukan di mana itu (bisa relatif atau absolut), atau Anda harus berada di direktori dan memiliki titik ( ., direktori saat ini) di PATH, yang secara luas dianggap sebagai tidak aman.
Jonathan Leffler
36

Alih-alih membuat daftar hitam karakter, Anda bisa menggunakan daftar putih . Semua hal dipertimbangkan, rentang karakter yang masuk akal dalam konteks nama file atau direktori cukup singkat, dan kecuali Anda memiliki persyaratan penamaan yang sangat spesifik, pengguna Anda tidak akan menahannya terhadap aplikasi Anda jika mereka tidak dapat menggunakan seluruh tabel ASCII.

Itu tidak memecahkan masalah nama yang dicadangkan dalam sistem file target, tetapi dengan daftar putih lebih mudah untuk mengurangi risiko pada sumbernya.

Dalam semangat itu, ini adalah serangkaian karakter yang dapat dianggap aman:

  • Letters (az AZ) - Karakter Unicode juga, jika diperlukan
  • Digit (0-9)
  • Garis Bawah (_)
  • Tanda hubung (-)
  • Ruang
  • Dot (.)

Dan setiap karakter aman tambahan yang ingin Anda izinkan. Di luar ini, Anda hanya perlu menegakkan beberapa aturan tambahan tentang ruang dan titik . Ini biasanya cukup:

  • Nama harus mengandung setidaknya satu huruf atau angka (untuk menghindari hanya titik / spasi)
  • Nama harus dimulai dengan huruf atau angka (untuk menghindari titik / spasi terkemuka)
  • Nama tidak boleh diakhiri dengan titik atau spasi (cukup potong itu jika ada, seperti yang dilakukan Explorer)

Ini sudah memungkinkan nama yang cukup kompleks dan tidak masuk akal. Sebagai contoh, nama-nama ini dimungkinkan dengan aturan-aturan ini, dan menjadi nama file yang valid di Windows / Linux:

  • A...........ext
  • B -.- .ext

Intinya, bahkan dengan begitu sedikit karakter yang masuk daftar putih Anda masih harus memutuskan apa yang sebenarnya masuk akal, dan memvalidasi / menyesuaikan nama yang sesuai. Di salah satu aplikasi saya, saya menggunakan aturan yang sama seperti di atas tetapi menghapus semua titik dan spasi duplikat.

AeonOfTime
sumber
15
Dan bagaimana dengan pengguna saya yang tidak berbahasa Inggris, yang semuanya akan kacau dengan ini?
pkh
2
@ pkh: Seperti yang saya sebutkan di posting saya, Anda akan memasukkan karakter unicode yang diperlukan dalam daftar putih Anda. Rentang karakter biasanya dapat ditentukan dengan cukup mudah, terutama jika Anda menggunakan ekspresi reguler misalnya.
AeonOfTime
2
Kami menggunakan pendekatan daftar putih, tetapi jangan lupa pada Windows Anda harus mengelola string yang dilindungi undang-undang, seperti nama perangkat (prn, lpt1, con) dan. dan ..
tahoar
2
Anda telah melewatkan batasan Windows: tidak boleh diakhiri dengan titik atau spasi.
Martin Bonner mendukung Monica
1
"Semua hal dipertimbangkan, rentang karakter yang masuk akal dalam konteks nama file atau direktori cukup pendek." Mungkin untuk beberapa kasus penggunaan. Saya sedang mengerjakan proyek yang sekarang melibatkan file media dalam 20 bahasa, dan nama file harus mencerminkan judul item media karena pengguna akhir akan menemukan konten seperti itu. Banyak nama menggunakan tanda baca. Setiap pembatasan pada karakter nama file dikenakan harga, jadi dalam hal ini kita harus meminimalkan batasan. Dalam kasus penggunaan ini, rentang karakter yang tidak masuk akal dalam nama file jauh lebih pendek dan lebih sederhana daripada yang melakukannya.
LarsH
29

Cara mudah untuk membuat Windows memberi tahu Anda jawabannya adalah dengan mencoba mengubah nama file melalui Explorer dan ketik / untuk nama baru. Windows akan memunculkan kotak pesan yang memberitahu Anda daftar karakter ilegal.

A filename cannot contain any of the following characters:
    \ / : * ? " < > | 

https://support.microsoft.com/en-us/kb/177506

chrisjej
sumber
28

Nah, jika hanya untuk tujuan penelitian, maka taruhan terbaik Anda adalah dengan melihat entri Wikipedia ini pada Nama File .

Jika Anda ingin menulis fungsi portabel untuk memvalidasi input pengguna dan membuat nama file berdasarkan itu, jawaban singkatnya adalah jangan . Lihatlah modul portabel seperti File Perl :: Spec untuk melihat sekilas semua hop yang diperlukan untuk menyelesaikan tugas "sederhana" tersebut.

Leonardo Herrera
sumber
5

Untuk Windows Anda dapat memeriksanya menggunakan PowerShell

$PathInvalidChars = [System.IO.Path]::GetInvalidPathChars() #36 chars

Untuk menampilkan kode UTF-8, Anda dapat mengonversi

$enc = [system.Text.Encoding]::UTF8
$PathInvalidChars | foreach { $enc.GetBytes($_) }

$FileNameInvalidChars = [System.IO.Path]::GetInvalidFileNameChars() #41 chars

$FileOnlyInvalidChars = @(':', '*', '?', '\', '/') #5 chars - as a difference
Wojciech Sciesinski
sumber
Bagi mereka yang tidak berbicara PowershelI, $ FileNameInvalidChars adalah 0x00 hingga 0x1F, dan: "<> | *? \ /
Robin Davies
4

Di Windows 10 (2019), karakter berikut dilarang oleh kesalahan saat Anda mencoba mengetiknya:

Nama file tidak boleh mengandung karakter berikut:

\ / : * ? " < > |

Bret Cameron
sumber
3

Inilah implementasi # ac untuk windows berdasarkan jawaban Christopher Oezbek

Itu dibuat lebih kompleks oleh boolean yang berisi Folder, tapi mudah-mudahan mencakup semuanya

/// <summary>
/// This will replace invalid chars with underscores, there are also some reserved words that it adds underscore to
/// </summary>
/// <remarks>
/// /programming/1976007/what-characters-are-forbidden-in-windows-and-linux-directory-names
/// </remarks>
/// <param name="containsFolder">Pass in true if filename represents a folder\file (passing true will allow slash)</param>
public static string EscapeFilename_Windows(string filename, bool containsFolder = false)
{
    StringBuilder builder = new StringBuilder(filename.Length + 12);

    int index = 0;

    // Allow colon if it's part of the drive letter
    if (containsFolder)
    {
        Match match = Regex.Match(filename, @"^\s*[A-Z]:\\", RegexOptions.IgnoreCase);
        if (match.Success)
        {
            builder.Append(match.Value);
            index = match.Length;
        }
    }

    // Character substitutions
    for (int cntr = index; cntr < filename.Length; cntr++)
    {
        char c = filename[cntr];

        switch (c)
        {
            case '\u0000':
            case '\u0001':
            case '\u0002':
            case '\u0003':
            case '\u0004':
            case '\u0005':
            case '\u0006':
            case '\u0007':
            case '\u0008':
            case '\u0009':
            case '\u000A':
            case '\u000B':
            case '\u000C':
            case '\u000D':
            case '\u000E':
            case '\u000F':
            case '\u0010':
            case '\u0011':
            case '\u0012':
            case '\u0013':
            case '\u0014':
            case '\u0015':
            case '\u0016':
            case '\u0017':
            case '\u0018':
            case '\u0019':
            case '\u001A':
            case '\u001B':
            case '\u001C':
            case '\u001D':
            case '\u001E':
            case '\u001F':

            case '<':
            case '>':
            case ':':
            case '"':
            case '/':
            case '|':
            case '?':
            case '*':
                builder.Append('_');
                break;

            case '\\':
                builder.Append(containsFolder ? c : '_');
                break;

            default:
                builder.Append(c);
                break;
        }
    }

    string built = builder.ToString();

    if (built == "")
    {
        return "_";
    }

    if (built.EndsWith(" ") || built.EndsWith("."))
    {
        built = built.Substring(0, built.Length - 1) + "_";
    }

    // These are reserved names, in either the folder or file name, but they are fine if following a dot
    // CON, PRN, AUX, NUL, COM0 .. COM9, LPT0 .. LPT9
    builder = new StringBuilder(built.Length + 12);
    index = 0;
    foreach (Match match in Regex.Matches(built, @"(^|\\)\s*(?<bad>CON|PRN|AUX|NUL|COM\d|LPT\d)\s*(\.|\\|$)", RegexOptions.IgnoreCase))
    {
        Group group = match.Groups["bad"];
        if (group.Index > index)
        {
            builder.Append(built.Substring(index, match.Index - index + 1));
        }

        builder.Append(group.Value);
        builder.Append("_");        // putting an underscore after this keyword is enough to make it acceptable

        index = group.Index + group.Length;
    }

    if (index == 0)
    {
        return built;
    }

    if (index < built.Length - 1)
    {
        builder.Append(built.Substring(index));
    }

    return builder.ToString();
}
Charlie Rix
sumber
Saya punya tiga pertanyaan: 1. Mengapa Anda menginisialisasi StringBuilderdengan nilai kapasitas awal? 2. Mengapa Anda menambahkan 12 ke panjang filename? 3. Apakah 12 dipilih secara sewenang-wenang atau apakah ada pemikiran di balik nomor ini?
iiminov
2

Pada 18/04/2017, tidak ada daftar karakter dan nama file hitam-putih yang jelas di antara jawaban untuk topik ini - dan ada banyak balasan.

Saran terbaik yang bisa saya ajukan adalah membiarkan pengguna memberi nama file tersebut sesuai keinginannya. Menggunakan penangan kesalahan ketika aplikasi mencoba untuk menyimpan file, menangkap pengecualian, menganggap nama file yang harus disalahkan (jelas setelah memastikan path save juga ok), dan meminta pengguna untuk nama file baru. Untuk hasil terbaik, letakkan prosedur pemeriksaan ini dalam satu lingkaran yang berlanjut sampai pengguna benar atau menyerah. Bekerja paling baik untuk saya (setidaknya di VBA).

FCastro
sumber
1
Jawaban Anda @FCastro benar dari sudut pandang teknis. Namun dari perspektif UX itu adalah mimpi buruk - pengguna dipaksa untuk memainkan game "ketik sesuatu dan saya akan memberi tahu Anda jika Anda berhasil" lagi dan lagi. Saya lebih suka melihat pesan (gaya peringatan) yang memberi tahu pengguna bahwa mereka telah memasukkan karakter ilegal yang nantinya akan dikonversi.
Mike
Christopher Oezbek memberikan daftar hitam semacam itu pada tahun 2015.
Jim Balter
1

Meskipun satu-satunya karakter Unix ilegal mungkin /dan NULL, meskipun beberapa pertimbangan untuk interpretasi baris perintah harus dimasukkan.

Misalnya, walaupun mungkin sah untuk memberi nama file 1>&2atau 2>&1di Unix, nama file seperti ini mungkin disalahartikan saat digunakan pada baris perintah.

Demikian pula mungkin untuk memberi nama file $PATH, tetapi ketika mencoba mengaksesnya dari baris perintah, shell akan menerjemahkan $PATHke nilai variabelnya.

Dogg Bookins
sumber
untuk literal di BASH, cara terbaik yang saya telah menemukan untuk menyatakan literal tanpa interpolasi adalah $'myvalueis', ex: $ echo 'hi' > $'2>&1', cat 2\>\&1"hi"
ThorSummoner
1

Kesulitan dengan mendefinisikan, apa hukum dan tidak yang sudah adressed dan Whitelist yang disarankan . Tetapi Windows mendukung lebih dari 8-bit karakter. Wikipedia menyatakan , bahwa (misalnya)

modifier letter colon [( lihat 7. di bawah )] kadang-kadang digunakan dalam nama file Windows karena identik dengan titik dua dalam font Segoe UI yang digunakan untuk nama file. Usus besar [ASCII yang diwariskan] sendiri tidak diizinkan.

Karena itu, saya ingin menyajikan pendekatan yang jauh lebih liberal menggunakan karakter Unicode untuk menggantikan yang "ilegal". Saya menemukan hasilnya dalam kasus penggunaan yang sebanding jauh lebih mudah dibaca. Lihat misalnya ke dalam blok ini . Plus Anda bahkan dapat mengembalikan konten asli dari itu. Pilihan dan penelitian yang memungkinkan disediakan dalam daftar berikut:

  1. Alih-alih *( U+002A * ASTERISK), Anda dapat menggunakan salah satu dari banyak yang terdaftar, misalnya U+2217 ∗ (ASTERISK OPERATOR)atauFull Width Asterisk U+FF0A *
  2. Alih-alih ., Anda dapat menggunakan salah satunya , misalnya⋅ U+22C5 dot operator
  3. Alih-alih ", Anda dapat menggunakan “ U+201C english leftdoublequotemark(Alternatif lihat di sini )
  4. Alih-alih /( / SOLIDUS U+002F), Anda dapat menggunakan ∕ DIVISION SLASH U+2215(yang lain di sini )
  5. Alih-alih \( \ U+005C Reverse solidus), Anda dapat menggunakan ⧵ U+29F5 Reverse solidus operator( lebih banyak )
  6. Alih-alih [( U+005B Left square bracket) dan ]( U+005D Right square bracket), Anda dapat menggunakan misalnya U+FF3B[ FULLWIDTH LEFT SQUARE BRACKETdan U+FF3D ]FULLWIDTH RIGHT SQUARE BRACKET(dari sini , lebih banyak kemungkinan di sini )
  7. Alih-alih :, Anda dapat menggunakan U+2236 ∶ RATIO (for mathematical usage)atau U+A789 ꞉ MODIFIER LETTER COLON, (lihat titik dua (huruf)) , kadang-kadang digunakan dalam nama file Windows karena identik dengan titik dua dalam font Segoe UI yang digunakan untuk nama file. Titik dua itu sendiri tidak diizinkan) (Lihat di sini )
  8. Alih-alih ;, Anda dapat menggunakan U+037E ; GREEK QUESTION MARK(lihat di sini )
  9. Untuk |, ada beberapa pengganti yang baik seperti: U+0964 । DEVANAGARI DANDA, U+2223 ∣ DIVIDESatau U+01C0 ǀ LATIN LETTER DENTAL CLICK( Wikipedia ). Juga karakter menggambar kotak berisi berbagai opsi lain.
  10. Alih-alih ,( , U+002C COMMA), Anda dapat menggunakan misalnya ‚ U+201A SINGLE LOW-9 QUOTATION MARK(lihat di sini )
  11. Untuk ?( U+003F ? QUESTION MARK), ini adalah kandidat yang baik: U+FF1F ? FULLWIDTH QUESTION MARKatau U+FE56 ﹖ SMALL QUESTION MARK(dari dia kembali , dua lagi dari Dingbats Block , mencari "pertanyaan")
Cadoiz
sumber
0

Saat membuat pintasan internet di Windows, untuk membuat nama file, ia melompati karakter ilegal, kecuali untuk garis miring, yang dikonversi menjadi minus.

Matthias Ronge
sumber
3
"bukan jawaban ... ditolak - seorang moderator memeriksa kembali bendera Anda, tetapi tidak menemukan bukti untuk mendukungnya". Anda pasti bercanda. Tolong, moderator yang lebih baik.
Jim Balter
-1

Dalam kerang Unix, Anda dapat mengutip hampir setiap karakter dalam tanda kutip tunggal '. Kecuali kutipan tunggal itu sendiri, dan Anda tidak dapat mengekspresikan karakter kontrol, karena \tidak diperluas. Mengakses kutipan tunggal itu sendiri dari dalam string yang dikutip adalah mungkin, karena Anda dapat menggabungkan string dengan kutipan tunggal dan ganda, seperti 'I'"'"'m'yang dapat digunakan untuk mengakses file yang disebut "I'm"(penawaran ganda juga dimungkinkan di sini).

Jadi Anda harus menghindari semua karakter kontrol, karena mereka terlalu sulit untuk dimasukkan ke dalam shell. Sisanya masih lucu, terutama file yang dimulai dengan tanda hubung, karena sebagian besar perintah membacanya sebagai opsi kecuali Anda memiliki dua tanda hubung --sebelumnya, atau Anda menentukannya dengan ./, yang juga menyembunyikan awal -.

Jika Anda ingin bersikap baik, jangan gunakan karakter apa pun yang digunakan shell dan perintah tipikal sebagai elemen sintaksis, terkadang tergantung posisi, jadi mis. Anda masih bisa menggunakan -, tetapi tidak sebagai karakter pertama; sama dengan ., Anda dapat menggunakannya sebagai karakter pertama hanya ketika Anda bersungguh-sungguh ("file tersembunyi"). Ketika Anda jahat, nama file Anda adalah urutan melarikan diri VT100 ;-), sehingga sebuah ls memutarbalikkan output.

sebagainya42
sumber
Pertanyaannya bukan tentang kerang.
Jim Balter
-8

Saya memiliki kebutuhan yang sama dan sedang mencari rekomendasi atau referensi standar dan menemukan utas ini. Daftar hitam karakter saya saat ini yang harus dihindari dalam nama file dan direktori adalah:

$CharactersInvalidForFileName = {
    "pound" -> "#",
    "left angle bracket" -> "<",
    "dollar sign" -> "$",
    "plus sign" -> "+",
    "percent" -> "%",
    "right angle bracket" -> ">",
    "exclamation point" -> "!",
    "backtick" -> "`",
    "ampersand" -> "&",
    "asterisk" -> "*",
    "single quotes" -> "“",
    "pipe" -> "|",
    "left bracket" -> "{",
    "question mark" -> "?",
    "double quotes" -> "”",
    "equal sign" -> "=",
    "right bracket" -> "}",
    "forward slash" -> "/",
    "colon" -> ":",
    "back slash" -> "\\",
    "lank spaces" -> "b",
    "at sign" -> "@"
};
Meng Lu
sumber
4
maukah Anda mengomentari memiliki @dalam daftar?
PypeBros
8
Pertanyaannya adalah karakter mana yang ilegal. Sebagian besar karakter dalam daftar Anda legal.
Nigel Alderton
6
surat itu b? lol, saya berasumsi itu b dari lank spaces... yah yang masih menyisakan beberapa ... Saya mengganti nama sebuah foto (),-.;[]^_~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ.jpgtetapi harus mengubahnya kembali karena tampak marah ...
ashleedawg