Dlaczego nie mogę mieć folderu i pliku o tej samej nazwie?

21

Nigdy wcześniej nie miałem tego problemu, ale z jakiegoś powodu nie mogę zmienić nazwy mojego folderu na packages/.

Oto struktura:

root
  -  packages_old/
  -  packages

Kiedy próbuję zmienić nazwę folderu za pomocą Thunar, pojawia się komunikat o błędzie informujący, że plik już istnieje. To samo z mv:

blender iso $ mv packages_old/ packages/
mv: accessing `packages/': Not a directory

Dlaczego nie mogę zmienić nazwy mojego pliku i folderu, aby mieć tę samą nazwę:

root
  -  packages/
  -  packages

I przysięgam, robiłem to już wcześniej.

Mikser
źródło
19
Twoja pamięć prawdopodobnie nie jest tak niezawodna, jak ci się wydaje. Na platformie unix „wszystko jest plikiem”. Nie możesz mieć pliku i folderu o tej samej nazwie, ponieważ katalogi są tylko specjalnym rodzajem pliku. Jest to związane z tradycyjnymi .drozszerzeniami katalogów w /etc. Załóżmy, że wiesz ls packageslub vim packages- skąd system wiedziałby, czy chcesz katalog lub plik?
jw013,
2
Czy możesz nam powiedzieć, jakiego systemu operacyjnego używasz? Ponieważ nie możesz mieć pliku, a katalog ma taką samą nazwę w większości systemów operacyjnych, jakie znam
rahmu,
2
@ j013, dlaczego odpowiedziałeś w komentarzu, a nie napisałeś odpowiedzi ?
andcoz,
1
Nie można tego również zrobić w systemie Windows. Na moim komputerze z systemem Windows 7 próba zrobienia tego powoduje błąd:There is already a file with the same name as the folder name you specified. Specify a different name.
Chris Down
4
W systemie Windows domyślnymi ustawieniami jest ignorowanie rozszerzeń, aby packagekatalog i package.txtplik mogły znajdować się w tym samym folderze. W Eksploratorze Windows pojawi się, że musisz wprowadzić wpisy o nazwie „pakiet”, podczas gdy w rzeczywistości ukrywa tylko część nazwy pliku jednego.
Arcege

Odpowiedzi:

35

W Uniksie prawie wszystko jest plikiem. Katalog to specjalny typ pliku, który z perspektywy użytkownika może „zawierać” inne pliki.

Błąd Not a directorywystępuje, ponieważ istniejący plik nie jest katalogiem, a ponieważ katalog jest rodzajem pliku, a w jednym katalogu nie mogą znajdować się dwa pliki o identycznych nazwach, nie można wykonać operacji.

Chris Down
źródło
6
Jeśli chodzi o problem z pamięcią, być może w przeszłości plik i katalog miały tę samą nazwę, ale z innym przypadkiem, na przykład „pakiet” i „pakiet”. W nazwach plików rozróżniana jest wielkość liter, więc to by działało.
noamtm
2

Ponieważ gdybyś był w stanie zrobić coś takiego, życie byłoby nieszczęśliwe dla programistów takich jak ja, gdy próbuję iterować pliki w katalogu.

Dla następującego pseudokodu:

isDir('/path/to/same_file_and_folder_name')

Czy system operacyjny powinien odpowiedzieć prawda czy fałsz?

Scott Yang
źródło
Powinien po prostu zwrócić „oba”.
Anthon
3
isAlive („ Kot Schrödingera ”) :-)
G-Man mówi „Przywróć Monikę”
1
@ G-Man Typ boolean oczekiwany, dostał obiekt (obietnica).
Scott Yang