Linux'ta dosya adlarını adlandırırken belirli özel karakterleri kullanmak doğru mu?


18

Belirli özel karakterleri, olarak kullanmak düzeltmek mi +, &, ', .(nokta) ve ,Dosya adlarında, temelde, (virgül).

Kullanabileceğinizi -ve _problemsiz olduğunu anlıyorum , ancak araştırma yaparken diğer semboller hakkında kesin bir şey bulamadım; bazıları yapabileceğinizi söyler, bazıları yapamayacağınızı söyler, bazıları ise bunları kullanmanın "ne kadar teşvik edildiğini" söylüyor.


Bu dosyalarla çalışmak için hangi programları kullanıyorsunuz? Yalnızca bazı karakterleri özel bir şekilde yorumlayan programlar (ör. Sıralanmamış dizgilerdeki kabuklar) sorun yaratacaktır. Ortalama C programınız, bir göz kırpmadan NUL olmayan her şeyi alır.
Anthon

9
"Doğru" ile ne demek istiyorsun?
David Richerby

Bir dosya adında özel karakterler kullanmayla ilgili sorun, bu tür bir kod parçasının dosya adını yanlış kullanma şansını artırmasıdır. Ancak, listelediğiniz karakterlerin herhangi birinin herhangi bir soruna neden olacağını düşünmüyorum. Genel olarak kaçınılması gereken boşlukla ilgili daha fazla sorununuz olur . Ve özellikle EOL'den her ne pahasına olursa olsun kaçınılmalıdır.

Windows , bir dosya adında neler olabileceğine dair daha katı kısıtlamalara sahiptir, bu nedenle dosyaların orada kullanılması gereken bir şans varsa, bu dikkat edilmesi gereken bir şeydir.
evilsoup

Yanıtlar:


28

+, &, ', Gibi bazı özel karakterleri kullanmak doğru mu? (nokta) ve, (virgül) temel olarak dosya adlarında.

Evet.

Doğru ama mutlaka tavsiye edilmez veya uygun değildir.

Modern Unix ve Linux dosya sistemlerinde null ve/ bir dosya adı dışındaki karakterleri kullanabilirsiniz .

ASCII noktalama işaretlerini kullanabilirsiniz . Bazı yardımcı programlar oluşturdukları dosyaların adlarında stop ( nokta ) ve virgül kullanır .

ASCII kontrol karakterlerini kullanabilirsiniz , ancak kabul edilebilir bir şekilde gösterilmeleri ve kullanımı zor olmaları nedeniyle bu tavsiye edilemez.

ASCII işareti ve ASCII kesme işareti gibi kabuk meta karakterlerini kullanabilirsiniz . Ancak bu elverişsizdir ve komutlar oluştururken bu karakterleri alıntılamak veya kaçmak için özel dikkat göstermeniz gerekir.

Çeşitli kodlamaları kullanarak çok baytlı karakterler kullanabilirsiniz . ASCII olmayan karakterleri doğru şekilde yorumlamak ve görüntülemek kabuk ve / veya yardımcı programlara bağlıdır. Kendinizi UTF-8 gibi popüler bir kodlama ile sınırlamanız ve yerel ayarı uygun şekilde ayarlamanız önerilir.

Sen sahip olacak en az sorunları kabuk meta karakterler ve kısa çizgi ile bir ad başlayan değildir değil iseler noktalama karakter setini sınırlayan, yazdırılabilir ASCII karakterleri kullanarak (ya da durdurma - Dosyayı gizlemek istediğiniz sürece).


23

Diğerlerinin de belirttiği gibi, modern Unix / Linux sistemlerinde, dosya adları \0(NUL) ve /(eğik çizgi) dışında herhangi bir karakter içerebilir .

Buna ek olarak, POSIX standardı dosya adları için taşınabilir bir karakter kümesi tanımlar:

3.278 Taşınabilir Dosya Adı Karakter Seti

Taşınabilir dosya adlarının oluşturulduğu karakter kümesi.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

Son üç karakter sırasıyla <period>, <underscore> ve <hyphen> karakterleridir. Ayrıca bkz . Yol adı .

pathchkDan yarar GNU coreutils bunun için çek zaman ile adlandırılan -pseçeneği ve -Pseçenek (geçerli olmayan fakat bir argüman olarak aktarılabilir boş dosya adları hakkında uyarır pathchk) (tire ile başlayan ve dosya adları -).


9

En güvenli bahis, herhangi bir işletim sistemi için izin verilen karakter kümesi için wikipedia girişine başvurmaktır. Bu gelen bulunabilir burada .

Örneğin, çoğu unix tabanlı sistem için, izin verilen karakter kümesi 8 bitlik settir ve ayrılmış karakter null karakterdir (NUL, '\0'). Ancak, dosya adlarındaki özel karakterleri kaldırırken sorun teşkil ettikleri için kullanmak iyi bir uygulama değildir.

Örneğin, bir dosya adına sahip olabilirim -ramesh.txtve aşağıdaki gibi kaldırmaya çalışıyorum.

rm -ramesh.txt
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
rm "-ramesh.txt"
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.

Dosyayı silmem gerekiyor,

rm -- "-ramesh.txt"
rm: remove regular empty file `-ramesh.txt'? y

Bu yanıtta daha fazla ayrıntı bulunabilir .

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

Ext2, ext3 gibi Linux dosya sistemleri karakter kümesi agnostiktir (bence bunu sadece bir bayt akışı olarak görürler - sadece boştur ve /yasaktır). Bu, dosya adlarını UTF-8 kodlamasında saklayabileceğiniz anlamına gelir. Ben görüntü veya işleme için dosya adını düzgün dönüştürmek için kullanmak için hangi kodlama bilmek kabuk veya başka bir uygulama kalmış.

Sonuç olarak, sorun dosya adları için özel karakterlerin kullanılması değil, bunların nasıl ele alınacağıdır.


Bu nedenle ("onları nasıl ele alacağım"), yalnızca daha sonra yalnızca harfleri, sayıları, alt çizgileri ve noktaları kullanıyorum, ancak daha sonra dosyalarıma bir şeyler yapmak için komut satırı programlarını kullanmam gerektiğine karar verdiğimde hayatımı kolaylaştırmak için (her zaman en az bir kez ortaya çıkıyor gibi görünüyor).
phyrfox

19
İle başlayan Değil savunucusu dosya için -ama sadece hassas olmak: kesinlikle bu dosya, 2 çevresindeki tırnak içine alınması gerekmez 1)) yerine özel kullanarak --tam olarak ne yapabilir argüman rmkendisi öneriyor rm ./-ramesh.txtEğer kalmamak, gerek bunu yapmak için tam olarak önerdiğiniz gibi.
Michał Politowski

@ MichałPolitowski Sadece alıntılara ihtiyacınız yok, aynı zamanda tam sıfır etkisi var.
ctrl-alt-delor

4

Araştırmanız neredeyse doğru. Dosya adlarında özel karakterler kullanmak mümkündür, ancak bu karakterlerin özel bir anlamı olduğundan önerilmez. Linux'taki Dosya Adlandırma Kuralları , dosya adlarında "Dosya adları hiçbir zaman tire ile başlamamalıdır" gibi diğer kısıtlamaları da açıklar.

Dosya adlarında özel karakterlerle komut satırı işlemleri gerçekleştirmenin basit bir örneği .

Kişisel bir not olarak, dosya adlarında özel karakterlerden kaçınmayı tercih ederim, çünkü bu dosyalar herhangi bir işlem için kullanıldığında özel dikkat gerektirirler. Böylece, geliştirme sürecinden özel karakterlerle uğraşma endişesini ortadan kaldırır.


1
Böylece tavsiye yalnızca kullanmak olacaktır -, _ve .Dosya adlarında (dot)?
Chris Klein

@ChrisKlein, evet, dosya adının başında olmasa da.
Simply_Me

Dosya adında değil , özel anlam programdadır (örneğin kabuğunuz) . Neredeyse U & L tüm programlar karakterler umurumda değil hiç sürece dosya içinde bir boş yok gibi.
Anthon

@Anthon, evet, bağlantıda açıklandığı gibi kabuğum.
Simply_Me

2
Kişisel bir not olarak, geliştiricilerin projelerinin üst klasörüne "föλder \ t☃" gibi bir ad vermelerini öneriyorum - böylece bozuk kod veya ikili dosyalar yayınlamak yerine bu tür dosya adlarını bozan bir hata yapıp yapmadıklarını hemen fark edecekler diğerlerinin etrafta dolaşması gerektiğidir. Bunu kullanmak bir sorun değildir, 'f' ile başlayan tek kişi olduğu sürece, herhangi bir kabukta sekme tamamlama, tür zor olanları girer.
Peteris
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.