Obecnie używam YYMMDD-NAME+PAGE
nazwy dla większości moich plików. NAME
ma spacje przekonwertowane na podkreślenia.
Chciałbym użyć YYYY-MM-DD
formatu daty, ale nie jestem pewien, jak oddzielić go od nazwy. -
Wyglądałby dziwnie, jeśli nazwa rozpoczął się od cyfry. Jeśli _
użyję znaku a , spowoduje to konflikt z podkreśleniem reprezentującym spację.
Jakie znaki są wystarczająco bezpieczne w nazwach plików, które by tu działały? Korzystam z systemu Linux, ale mogę udostępniać pliki innym osobom (Windows 7, Mac OS X).
Odpowiedzi:
Podsumowanie:
\/:*?"<>|
/
Na wszystkich platformach najlepiej unikać znaków niedrukowalnych, takich jak znaki kontrolne ASCII.
Windows
W systemie Windows Eksplorator Windows nie zezwala na znaki sterujące lub
\/:*?"<>|
możesz używać spacji. Jeśli używasz spacji, często będziesz musiał podać nazwę pliku, gdy jest używany z wiersza poleceń (ale o ile wiem, nie ma to wpływu na aplikacje GUI). System plików Windows, taki jak NTFS, najwyraźniej przechowuje kodowanie z nazwą pliku, ale UTF-16 jest standardem.W niektórych częściach systemu Windows rozróżniana jest wielkość liter, w innych częściach rozróżniana jest wielkość liter. Łatwo jest tworzyć różne nazwy plików, takie jak „Ab” i „ab” w systemie plików Windows NTFS. Nazwy te odnoszą się do oddzielnych plików, które zawierają odrębną oddzielną treść. Jednak chociaż wiersz polecenia systemu Windows chętnie wyświetla oba pliki przy użyciu
dir
, nie można łatwo uzyskać dostępu do jednego z nich ani nim manipulować za pomocą takich poleceń, jaktype
. Patrz poniżej.Linux, OS-X
/
Uważam, że w Linuksie i OS-X tylko zestaw ASCII do wydruku jest zabroniony. Niektóre znaki (takie jak metaznaki powłoki*?!
) powodują problemy w wierszach poleceń i wymagają odpowiedniego cytowania lub zmiany znaczenia nazwy pliku.Systemy plików Linux, takie jak ext2, ext3, są agnostyczne dla zestawu znaków (myślę, że traktują to mniej więcej jako strumień bajtów - tylko wartości zerowe i
/
są zabronione). Oznacza to, że możesz przechowywać nazwy plików w kodowaniu UTF-8. Sądzę, że od powłoki lub innej aplikacji zależy, jakiego kodowania użyć, aby poprawnie przekonwertować nazwę pliku do wyświetlania lub przetwarzania.Wniosek
Prawdopodobnie mógłbyś bezpiecznie użyć czegoś takiego
✣
(gdyby nie było tak trudno pisać)Czułość na (w) w systemie Windows
Zauważ, że nie możemy wpisać zawartości drugiego pliku,
type
polecenie Windows po prostu zwraca zawartość Ab. Trzeci plik również różni się od aB w Linuksie.(Windows 10 NTFS).
źródło
Chociaż odpowiedź RedGrittyBrick jest technicznie poprawna, bezpieczeństwo nie jest jedynym problemem: użyteczność jest również ważna. Wydaje mi się, że lepszym pytaniem jest „jakie znaki warto zastosować w nazwie pliku”.
Niektóre potencjalne wytyczne:
\/:*?"<>|
a bajt zerowy jest problematyczny w co najmniej jednym systemie i zawsze należy go unikać.[]()^ #%&!@:+={}'~
i [ `] wszyscy mają specjalne znaczenie w wielu muszli, i są irytujące, aby obejść, a więc należy go unikać. Wyglądają też okropnie w adresach URL .Zasadniczo pozostawia Ci to:
[0-9a-zA-Z -._]
które są zawsze bezpieczne i nie denerwujące w użyciu (pod warunkiem, że nazwa pliku zaczyna się od alfanumerycznej) :)
źródło
[]
) są częścią wyrażeń regularnych i mają również specjalne znaczenie w powłoce. Ale nie są tak źli do pracy, z wyjątkiem niektórych złych przypadków w rogu.()
.[]()^;
, więc myślę, że właściwą odpowiedzią może być[0-9a-zA-Z.,_-]
przecinek, można również wykluczyć tylko dlatego, że dziwnie jest widzieć w nazwie pliku, chociaż nie mogę wymyślić rzeczywistego przypadku, w którym spowodowałoby to problemy.echo whereami > a,b,c
w oknie wiersza polecenia Win10.Mógłbyś:
#
(symbol korektora dla spacji)Alt-1. wielkie litery mogą zastępować spacje:
YYMMDD-HHMM-FileName.ext
lubYYMMDD-HHMM_FileName.ext
Minimalne znaki dla wyraźnego wyświetlania, które automatycznie sortują z dopełnionymi zerami dla stycznia-września (i 1 -9 ea mo).
źródło