簡體   English   中英

macos 中目錄重命名的意外行為(其他 posix 風格?)

[英]unexpected behavior of directory renaming in macos (other posix flavors?)

基本上,在 Python 或 bash 中,我可以在該目錄中將目錄重命名為不同的名稱:此時,在目錄中,舊名稱仍然顯示,但實際上重命名已經發生。

在帶有 APFS 的 macos 上,這發生在 Python 腳本中,我正在編寫以根據我使用的特定命名約定重命名目錄,並且我注意到了這種行為。

我將其發布為 posix/shell/macos,因為我有一半希望在 Linux 下也會發生這種情況,並且我從 zshell 中得到了相同的一般行為。

假設我有一個目錄foo

(venv) jluc@test$ tree
.
└── foo

我用mv foo bar

(venv) jluc@test$ tree
.
└── bar

但是現在,讓我們 cd 進入該目錄並在那里執行重命名。

$cd bar
$pwd
/Users/jluc/kds2/wk/explore/test/bar
$ mv ../bar ../zoom
$ pwd
/Users/jluc/kds2/wk/explore/test/bar  👈 still the old name

所以,現在,在bar中,我將它重命名為zoom 它沒有出錯。 在本地, pwd顯示我仍在同一目錄中。 我可以執行ls並且我不在無效目錄中,某些命令有時可以將我放入其中。

然而,上一層的樹講述了一個不同的故事。

(venv) jluc@bar$ tree ..
..
└── zoom  👈 but here I see the new name

並且 cd 到當前目錄失敗

cd `pwd`
-bash: cd: /Users/jluc/kds2/wk/explore/test/bar: No such file or directory

以薛定諤的名義,發生了什么? 文件系統底層的 inode 方案 APFS 是否提供此功能? 不同的文件系統,例如 ext4 也會表現出相同的行為嗎?

更新:如果我的測試目錄中有一個單獨的文本文件,我可以在本地重命名之前和之后的文件內容,所以它不僅僅是cat - 文件系統也可以協作。 當前目錄仍然有效且可操作(這符合@that other guy's answer)。

有兩件事在起作用:

  1. 在 Unix 上,打開文件或目錄的任何句柄通常不受重命名和刪除的影響。
  2. shell 會記住您所在的目錄,不會每次都重新查詢。

#1 意味着在大多數情況下,您可以刪除或移動仍在使用的文件/目錄,並且使用過程可以繼續使用它直到完成。 #2 意味着 shell 的pwd將只返回舊名稱(盡管必須重新查詢的外部/bin/pwd將失敗)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM