Linux Zarówno wielkość liter, jak i wielkość liter są zawsze niewygodne?

8

Używam Ubuntu 10 i szybko dowiaduję się, że rozróżniana jest wielkość liter, gdy jest to niewygodne (na przykład podczas autouzupełniania ścieżek plików z tabulatorem w terminalu), ale także rozróżnia małe i duże litery przy użyciu poleceń MV i CP (również niewygodne podczas próby skopiowania nazwy pliku z inną literą).

Zasadniczo potrzebuję tego polecenia do działania, ale nie działa.

cp ./filename.txt ./FileName.txt

Po prostu kończę na filename.txt:

wprowadź opis zdjęcia tutaj

Jak mogę uzyskać ten sam plik z inną kopią, ale o tej samej nazwie w tym samym katalogu?

EDYCJA: Poniższy komentarz Maericsów pomógł mi zapamiętać, że tak naprawdę rozwijam się na współdzielonym dysku Windows z systemem NTFS, co nie ma znaczenia dla wielkości liter. Dlatego nawet jeśli CP i MV nie generują błędu, plik nie jest kopiowany (lub bardziej prawdopodobne jest, że jest kopiowany, ale Windows zastępuje już istniejący).

anon58192932
źródło
1
To dziwne: przetestowałem to polecenie bez zaskoczenia ... Nie mam problemu z różnymi przypadkami w tym samym katalogu.
Denys Séguret
5
Należy pamiętać, że takie zachowanie może zależeć od typu systemu plików, na którym istnieją te pliki. Na przykład FAT32 nie może różnicować tych nazw plików.
maerics
ŁAŁ. To była odpowiedź Maerics. Pliki są przechowywane na zamontowanym dysku z systemem NTFS. Zupełnie zapomniałem, ponieważ rozwijam platformę, w której do przechowywania plików używam systemu Windows.
anon58192932
1
@advocate: W systemie plików NTFS rozróżniana jest wielkość liter, dlatego należy zainstalować go tak, jak chcesz. Pytanie brzmi jednak, czy tego właśnie chcesz :)
0xC0000022L
Testy pokazują, że Windows 7 nie wydaje się rozróżniać wielkości liter.
anon58192932

Odpowiedzi:

5

NTFS 1 i VFAT nie rozróżniają wielkości liter, po prostu zachowują wielkość liter. Oznacza to, że jeśli utworzyć plik o nazwie FileName.txt, system plików będzie zachować mieszane nazwę sprawy, ale można uzyskać dostępu do pliku z kombinacji cokolwiek przypadku tych samych liter, jak FILENAME.TXT, filename.txtlub fileNAME.txt. To wyjaśnia, że ​​w tym samym katalogu nie można mieć dwóch plików o tej samej pisowni, a jedynie odmianę wielkich / małych liter.

Wyeksportowany system plików SMB musi zaimplementować to zachowanie, aby nie mylić klientów Windows.

ZFS można skonfigurować tak, aby zachowywał się w ten sposób z casesensitivity=mixedwłaściwością.

1 Technicznie, w systemie plików NTFS rozróżniana jest wielkość liter, ale systemy plików montujące systemy operacyjne tego typu są prawie zawsze skonfigurowane tak, aby ukrywać tę podstawową funkcję i tylko zachowywać wielkość liter. System Windows może jednak włączyć rozróżnianie wielkości liter dzięki modyfikacji tego klucza rejestru, HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\dword:ObCaseInsensitivea Linux może montować te systemy plików z różnymi zachowaniami w zależności od opcji ignore_casei windows_namesmontowania.

jlliagre
źródło
3
NTFS absolutnie jest wielkość liter. Jednak Win32 nie rozróżnia wielkości liter, więc z praktycznych powodów większość ludzi zakłada, że ​​NTFS też nie.
Cody Gray
@CodyGray Tak, masz rację, dziękuję za wskazanie tej funkcji. Bazowy system plików NTFS zezwala na różne nazwy plików, różniące się jedynie wielkością liter.
jlliagre
11

Możesz włączyć uzupełnianie nazw plików bez rozróżniania wielkości liter w bash, dodając następujący wiersz do $HOME/.inputrc:

set completion-ignore-case On

Odnośnie nazw plików: Zależy to od systemu plików. W systemach plików Linux nie powinno być problemu. W innych systemach plików zachowanie można kontrolować za pomocą opcji polecenia mount. Zobacz stronę podręcznika, mount(8)aby uzyskać więcej informacji na temat dostępnych opcji montażu.

nosid
źródło
Masz rację. Podstawowy system plików nie był systemem plików Linux, więc podczas gdy CP i MV działają, Windows decyduje się zachować istniejący już plik (przy nadpisywaniu z powodu rozróżnienia wielkości liter IN), co sprawia, że ​​pojawia się on w terminalu uniksowym, jakby polecenie w ogóle nie działało . Również dzięki za ukończenie zignoruj ​​skrzynkę, która bardzo pomoże!
anon58192932
Czy rozróżniane są wielkie i małe litery? ;)
Arj
Niestety, to nie pomoże ci w skrypcie.
Sridhar Sarnobat
2

Czy jest to właściwość systemu plików czy coś innego?

pa-ubuntu-11388$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.3 LTS
Release:        10.04
Codename:       lucid
pa-ubuntu-11388$ ls -l
pa-ubuntu-11388$ touch filename.txt
pa-ubuntu-11388$ ls -l
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 filename.txt
pa-ubuntu-11388$ cp ./filename.txt ./FileName.txt
pa-ubuntu-11388$ ls -l
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 FileName.txt
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 filename.txt

Działa dla mnie dobrze.

D.Shawley
źródło
Powyższe wskazówki pomogły mi rozwiązać problem. Rozwijam w Ubuntu port Windows -> Linux, ale pliki są przechowywane na komputerze z systemem Windows i zapomniałem, że miałem zamontowany dysk. Podstawowy system plików NTFS zapobiegał istnieniu obu plików w tym samym czasie.
anon58192932
1

Ubuntu nie rozróżnia wielkości liter. Zawsze uwzględniana jest wielkość liter. filename.txti Filename.txtsą dwoma różnymi plikami i mogą być umieszczone w tym samym katalogu. Więc to polecenie:

cp ./filename.txt ./FileName.txt

będzie działać bez problemu w tym samym katalogu.

PP
źródło
Ale tak nie jest. Próbowałem to rozgryźć przez ostatnią godzinę.
anon58192932
2
być może nie masz filename.txtsiebie w bieżącym katalogu?
PP
Na pewno tam jest.
anon58192932
Powyższe wskazówki pomogły mi rozwiązać problem. Rozwijam w Ubuntu port Windows -> Linux, ale pliki są przechowywane na komputerze z systemem Windows i zapomniałem, że miałem zamontowany dysk. Podstawowy system plików NTFS zapobiegał istnieniu obu plików w tym samym czasie.
anon58192932
2
Widziałem komentarz Maerics. thx
PP