[基本上,在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 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
以薛定inger的inger的名义发生了什么?文件系统APFS底层的inode方案是否提供此功能?不同的文件系统(例如ext4)是否也会表现出相同的行为?
有两件事在玩: