Linux, Windows ve OS-X için platformlar arası dosya adlarında hangi karakterler güvenlidir?


60

Şu anda, YYMMDD-NAME+PAGEdosyalarımın çoğu için bir ad kullanıyorum . NAMEAlt çizgi dönüştürülmüş boşluklar vardır.

YYYY-MM-DDTarih biçimini kullanmak isterdim , ancak adından nasıl ayrılacağından emin değilim. Bir -isim bir sayı ile başladıysanız tuhaf görünürdü. A kullanırsam _, o zaman bir boşluğu temsil eden alt çizgi ile çakışır.

Hangi karakterlerin burada çalışacak dosya adlarında makul derecede güvenli olduğu? Linux'tayım, ancak dosyaları başkalarıyla paylaşabilirim (Windows 7, Mac OS X).


... Unix, Windows, bir Amiga 1000?
slhck

Çoğunlukla modern Linux.
Martin Ueding

- sembol Windows 7 kullanmak güvenli .. başka bir modern işletim sistemi olabilir .. aynı .. eksi sembolünü ayırmak için kullanabilirsiniz ..
Niranjan Singh 18:11

Yanıtlar:


48

Özet:

  • Windows: ASCII'nin kontrol karakterleri ve \/:*?"<>|
  • Linux, OS-X: boş veya /

Tüm platformlarda, ASCII kontrol karakterleri gibi yazdırılamayan karakterlerden kaçınmak en iyisidir.

pencereler

Windows'ta Windows Gezgini kontrol karakterlerine izin vermiyor veya \/:*?"<>|boşluk kullanabilirsiniz. Boşluk kullanırsanız, komut satırından kullanıldığında genellikle dosya adını belirtmeniz gerekir (ancak GUI uygulamaları bildiğim kadarıyla etkilenmez). NTFS gibi Windows dosya sistemi görünüşte dosya adıyla kodlamayı depolar, ancak UTF-16 standarttır.

Windows'un bazı bölümleri büyük / küçük harf duyarlıdır, diğer bölümler büyük / küçük harf duyarlı değildir. Windows NTFS dosya sisteminde "Ab" ve "ab" gibi farklı dosya adları oluşturmak kolaydır. Bu adlar, ayrı ayrı içerik içeren ayrı dosyalara atıfta bulunur. Ancak, Windows komut istemi kullanarak her iki dosyayı da mutlu bir şekilde listeleyse de dir, bunlardan birine gibi komutları kullanarak kolayca erişemez veya bunları işleyemezsiniz type. Aşağıya bakınız.

Linux, OS-X

Linux ve OS-X'te yalnızca /yazdırılabilir ASCII setinin yasak olduğunu düşünüyorum. Bazı karakterler (kabuk meta karakterleri gibi *?!) komut satırlarında sorunlara neden olur ve dosya adının uygun şekilde alıntılanmasını veya kaçılmasını gerektirir.

Ext2, ext3 gibi Linux dosya sistemleri karakter kümesi agnostiktir (bence az çok bayt akışı olarak görürler - sadece boş ve /yasaktır). Bu, dosya adlarını UTF-8 kodlamasında saklayabileceğiniz anlamına gelir. Dosya adını görüntülemek veya işlemek üzere uygun şekilde dönüştürmek için hangi kodlamanın kullanılacağını bilmek kabuğun veya diğer uygulamaların kullanımına bağlı olduğuna inanıyorum.

Sonuç

Böylece, muhtemelen güvenli bir şekilde, örneğin yazmak çok zor olmasaydı gibi bir şey kullanabilirsiniz.


Windows'ta büyük / küçük harf duyarlılığı

C> dir /B
Ab
aB
аB

C> type Ab
b
b

C> type aB
b
b

C> type аB
unicode homograph

İkinci dosyanın typeiçeriğini yazamadığımızı unutmayın , Windows komutu bunun yerine Ab içeriğini döndürür. Üçüncü dosya da Linux'taki aB'den farklı olurdu.

(Windows 10 NTFS).


1
Sonuçta iyi bir cevap, ancak boşluklarda dosya adlarını kullanmaktan kaçınırdım. Tüm bağlamlarda düzgün bir şekilde onlardan kaçmak, değerinden daha fazla sorun. Microsoft'un sistem dizini adlarında boşluk kullanmayı bıraktığına dikkat edin. İsimlerdeki sözcük sınırlarını belirtmeniz gerekirse, CamelCase düzgün çalışır.
Isaac Rabinovitch

4
"C: \ Program files (x86)" Win8'de hala var - bu bir sistem dizini değil mi? Alanların sorunlara yol açabileceğini kabul ediyorum.
RedGrittyBrick 6:12

Öyle, ama hemen hemen her şeye yeniden adlandırılabilir. Elbette, "]: \ foobar" olarak yeniden adlandırırsanız birçok program çıldırır, ancak Windows yine de "% programfiles (x86)%" olarak adlandırılır.
Marcks Thomas

2
Burada gerçekten akılda tutulması gereken bir şey olan linux sistemi, büyük ve küçük harfleri farklı olarak düşünürken, Windows bunları aynı görüyor.
thecoshman

1
Kaç tane program ayrıştırırken emilirse şaşıracaksınız. Bu yüzden Windows 9 yoktu.
Isaac Rabinovitch

46

RedGrittyBrick'in cevabı teknik olarak doğru olsa da, güvenlik tek sorun değil: kullanılabilirlik de önemlidir. Bence daha iyi bir soru "bir dosya adı hangi karakterleri kullanmak iyidir".

Bazı potansiyel kurallar:

  • [0-9a-zA-Z_] - Alfanümerik karakterler ve alt çizgi kullanımı her zaman iyidir.
  • \/:*?"<>|ve boş bayt en az bir sistemde sorunlu ve her zaman kaçınılması gerekir .
  • Boşluklar birçok sistemde argüman ayırıcı olarak kullanılır, bu nedenle mümkün olduğunda boşluk içeren dosya adlarından kaçınılmalıdır. Diğer boşluklar (örneğin sekmeler) daha da fazla.
  • Noktalı virgül (;) birçok sistemdeki komutları ayırmak için kullanılır. Noktalı virgül ve virgül (, ) , Windows komut satırındaki komut satırı argümanlarını ayırmak için kullanılır .
  • []()^ #%&!@:+={}'~ve [`] hepsinin birçok mermide özel anlamları vardır ve etrafta çalışmak rahatsız edicidir ve bundan kaçınılmalıdır. Ayrıca URL’lerde de korkunç görünme eğilimindedirler .
  • Kaçınılması gereken karakterler :
    • Birçok komut satırı programı özel argümanları belirtmek için kısa çizgi [-] kullanır.
    • * nix tabanlı sistemler gizli dosyalar ve dizinler için öncü bir karakter olarak full-stop [.] kullanır .
  • ASCII setinde olmayan herhangi bir şey eski veya daha fazla temel sistemde (örneğin bazı gömülü sistemler) sorunlara neden olabilir ve dikkatli kullanılmalıdır.

Bu temelde size bırakır:

[0-9A-z-A-Z, -._]

bu her zaman güvenlidir ve kullanımı sinir bozucu değildir (dosya adını alfa-sayısal olarak başlattığınız sürece) :)


1
Parantezler ( []) normal ifadelerin bir parçasıdır ve kabukta özel bir anlamı vardır. Ancak bazı kötü köşe vakaları dışında çalışmak için o kadar da kötü değiller.
Martin Ueding

1
Hrm ... Sanırım ()aslında aynı şey söylenebilir .
naught101,

4
Zsh'de, farklı şekilde yorumlanabilecek karakterleri içerir []()^;, bu yüzden doğru cevabın aslında [0-9a-zA-Z.,_-]Comma da olabileceğini düşünüyorum, çünkü bir dosya adında görmek garipti, çünkü neden olacağı gerçek bir durumu düşünemiyorum. sorunları.
Casey Rodarmor

evet, onları final listesinden
çıkardım

1
virgül sinir bozucu olabilir, echo whereami > a,b,cWin10 komut istemi penceresinde deneyin .
RedGrittyBrick

4

Yapabilirdin:

  1. Geçerli alt #çizgi'leri (boşluk denetleyicinin simgesi) ile değiştirin
  2. dosya adından 'bölüm' tarihinin altını çizin (veya ikinci bir kısa çizgi - yazması daha kolay)

Alt-1. ilk büyük harfler boşluk bırakabilir: YYMMDD-HHMM-FileName.extveyaYYMMDD-HHMM_FileName.ext

Ocak-Eylül (& 1st-9th ea mo) için yastıklı sıfırlarla otomatik olarak sıralanan net görüntü için en az karakter.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.