MacOS中目录重命名的意外行为(其他posix风格?)

基本上,在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的文件内容,因此不仅仅是外壳-文件系统也可以协作。当前目录仍然有效且可操作(与其他人的答案相同)。

x164695535 回答:MacOS中目录重命名的意外行为(其他posix风格?)

有两件事在起作用:

  1. 在Unix上,打开文件或目录的任何句柄通常不受重命名和删除的影响。
  2. shell会记住您所在的目录,它不会每次都重新查询。

#1表示,在大多数情况下,您可以删除或移动仍在使用的文件/目录,并且使用过程可以继续使用它,直到完成为止。 #2表示外壳程序的pwd只会返回旧名称(尽管必须重新查询的外部/bin/pwd会失败)。

本文链接:https://www.f2er.com/3121055.html

大家都在问