Tại sao tôi không thể có một thư mục và một tệp có cùng tên?


21

Tôi chưa bao giờ gặp vấn đề này trước đây, nhưng vì một số lý do, tôi không thể đổi tên thư mục của mình thành packages/.

Đây là cấu trúc:

root
  -  packages_old/
  -  packages

Khi tôi cố đổi tên thư mục bằng Thunar, tôi nhận được thông báo lỗi nói rằng tệp đã tồn tại. Tương tự với mv:

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

Tại sao tôi không thể đổi tên tệp và thư mục của mình để có cùng tên:

root
  -  packages/
  -  packages

Tôi thề tôi đã làm điều này trước đây.


19
Bộ nhớ của bạn có thể không hoàn hảo như bạn nghĩ. Trong nền tảng unix "mọi thứ là một tập tin". Bạn không thể có một tệp và thư mục có cùng tên vì các thư mục chỉ là một loại tệp đặc biệt. Nó liên quan đến các .dphần mở rộng truyền thống trên các thư mục trong /etc. Giả sử bạn đã làm ls packageshoặc vim packages- làm thế nào hệ thống biết nếu bạn muốn thư mục hoặc tệp?
jw013

2
Bạn có thể cho chúng tôi biết bạn đang sử dụng hệ điều hành nào không? Bởi vì bạn không thể có một tập tin và một thư mục có cùng tên trên hầu hết các hệ điều hành mà tôi biết
rahmu

2
@ j013, tại sao bạn đã trả lời trong một bình luận và không viết câu trả lời ?
andcoz

1
Bạn cũng không thể làm điều đó trên Windows. Trên máy Windows 7 của tôi, cố gắng làm như vậy sẽ dẫn đến lỗi:There is already a file with the same name as the folder name you specified. Specify a different name.
Chris Down

4
Trong Windows, cài đặt mặc định là bỏ qua các tiện ích mở rộng, do đó bạn có thể có một packagethư mục và một package.txttệp trong cùng một thư mục. Từ Windows Explorer, sẽ xuất hiện rằng bạn phải nhập các mục được gọi là "gói", trong khi thực tế, nó chỉ ẩn một phần tên tệp của một.
Arcege

Câu trả lời:


35

Trong Unix, hầu hết mọi thứ là một tập tin. Thư mục là một loại tệp đặc biệt mà theo quan điểm của người dùng có thể "chứa" các tệp khác.

Lỗi Not a directoryxảy ra do tệp hiện tại của bạn không phải là thư mục và vì thư mục là một loại tệp và không thể có hai tệp có tên giống hệt nhau trong một thư mục, nên không thể thực hiện thao tác.


6
Đối với vấn đề bộ nhớ của bạn, có thể trong quá khứ tệp và thư mục của bạn có cùng tên nhưng với trường hợp khác nhau, như "gói" và "Gói". Tên tệp là trường hợp nhạy cảm, do đó sẽ làm việc.
noamtm

2

Bởi vì nếu bạn có thể làm một việc như vậy, cuộc sống sẽ thật khốn khổ cho những lập trình viên như tôi khi tôi cố gắng lặp lại các tập tin trong một thư mục.

Đối với mã giả sau:

isDir('/path/to/same_file_and_folder_name')

Hệ điều hành nên trả lời đúng hay sai?


Nó sẽ chỉ trả về 'cả hai'.
Anthon


1
@ G-Man Loại boolean dự kiến, có đối tượng (lời hứa).
Scott Yang
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.