如何將文件重命名為 ..(點點)?
如果我瘋了,我將如何將文件重命名為
..
or.
?這樣的文件名甚至允許嗎?反斜杠似乎並沒有禁用點的特殊含義:
$ mv test \. mv: `test' and `./test' are the same file
..
並不特別,只是它已經存在。在 Unix、Dos 和 MS-Windows 上,每個目錄都有一個
.
連結回自身的目錄和一個..
連結到其父目錄的目錄(如果是根目錄,則為自身)。如果
..
和.
是特殊的,那隻是因為你不能刪除它們,或者重命名它們(實際上你可以刪除它們,你只需刪除包含它們的目錄)。因此,您不能命名任何(其他)文件
.
或..
.但是你可以創建文件
...
,\
,…
,..
(注意後面有一個空格..
,但是你在這裡幾乎看不到它,或者在你的目錄列表中很容易看到它)或者你喜歡的任何其他名稱;唯一的保留字元是/
(警告 - 高級詳細資訊:null,null 是一個特殊字元,除了標記事物的結束,有時用作分隔符之外,不用於任何用途)。.
沒有特殊含義:不是文件名、核心或shell,不需要轉義。實際上,如果文件名以 a 開頭,.
那麼它是特殊的,該文件通常會被目錄列表工具(例如ls
)隱藏,但它仍然不需要轉義。在旁邊
ls
這種隱藏文件行為出現在作者想要隱藏的早期實現中.
,..
因此他們編寫了程式碼來隱藏任何以 . 開頭的文件.
。其他使用者注意到此錯誤/功能並開始創建以 a 開頭.
的文件,當時他們希望隱藏文件。連結問題的解釋
在您連結到提問者的問題中,試圖將文件移動到父目錄
..
但最終重命名為...
,預設情況下,以點開頭的文件是隱藏的,這就是他們找不到它的原因。在表單中使用 mv 時
mv a b
- 如果你移動到
.
它實際上是一個無操作,但mv
將它視為一個錯誤。- 如果移動到
..
它將文件移動到父目錄。
您不能將文件重命名為
.
或..
因為所有目錄都已包含這兩個名稱的條目。(這些條目指向目錄,您不能將文件重命名為目錄。)
mv
檢測目標是現有目錄的情況,並將其解釋為將文件移動到該目錄的請求(使用其目前名稱)。反斜杠與此無關,因為
.
它不是 shell 元字元。\.
和.
相同bash
。