基本上,在Python或bash中,我可以将目录重命名为该目录中的其他名称:此时,目录中仍会显示旧名称,但实际上重命名已经进行了。
在具有APFS的macos上,这是由于我正在编写Python脚本来实现的,该脚本是根据我使用的特定命名约定来重命名目录的,我注意到了这一现象。
我将其发布为posix / shell / macos,因为我一半希望在Linux下也能做到这一点,而且我在zshell中也得到了相同的一般行为。
假设我有一个目录implementation 'com.android.volley:volley:1.1.1'
:
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
和cd到当前目录失败
(venv) jluc@bar$ tree ..
..
└── zoom ? but here I see the new name
以薛定inger的?的名义发生了什么?文件系统APFS底层的inode方案是否提供此功能?不同的文件系统(例如ext4)也会表现出相同的行为吗?
更新:如果我的测试目录中有一个单独的文本文件,则可以在本地重命名前后cd `pwd`
-bash: cd: /Users/jluc/kds2/wk/explore/test/bar: No such file or directory
cat
的文件内容,因此不仅仅是外壳-文件系统也可以协作。当前目录仍然有效且可操作(与其他人的答案相同)。