被另一个用户移动后的当前目录

Current directory after was moved by another user

我有一个在文件夹 a 上打开的终端:

hostname:/path/to> mkdir a
hostname:/path/to> cd a
hostname:/path/to/a> cat > b.txt

另一个用户已将文件夹移动到另一个位置

hostname:/path/to> mv a /another/hidden/path/i/dont/know

我想知道他把它移到哪里去了。

旧终端仍然有效,但 pwd 显示旧路径,因为 linux 文件系统的工作方式。旧的绝对路径当然不存在:

hostname:/path/to/a> ls
b.txt
hostname:/path/to/a> pwd
/path/to/a
hostname:/path/to/a> ls /path/to/a
ls: cannot access /path/to/a: No such file or directory

我考虑遍历上层并在每个级别中查找正确的文件夹:

hostname:/path/to/a> ls ../
...
hostname:/path/to/a> ls ../../
...
hostname:/path/to/a> ls ../../../
...

但是,如果其中一个级别包含很多子目录,则此解决方案可能会非常困难。在我的具体情况下,这是不可能的,因为我没有上层之一的权限。

我想可能无法找到确切的路径,因为 linux fs 的工作方式(例如,同一个目录可能有很多硬链接)。我不在乎为路径寻找一些候选者,有没有办法找到使我能够接近目录的绝对路径?

您可以尝试 find / -d -name "a" -exec cd {} \; 更改到移动的目录,假设用户没有更改它的名称。如果您想获取移动目录的路径,请使用 find / -d -name "a" -exec echo "path is {}" \;

编辑

如果有更多同名目录并且您知道该目录何时被移动,请使用 find / -d -name "a" -mmin -$minutes -exec echo "path is {}" \; 其中 $minutes 是它被更改的时间以查找所有目录名称 "a"在指定时间段内更改。

如果有人重命名并移动目录,您需要做一些手工工作。使用 find / -d -mmin -$minutes -ls 列出指定时间段内更改的所有目录。

正如 hellerpop 所说,您可能想使用 -cmin 而不是 -mmin

回答我自己的问题:我可以在一个唯一命名的子文件夹上使用 lsof(我应该遍历它所以它被认为是 "opened"):

hostname:/path/to/a> mkdir uniquely_named_directory
hostname:/path/to/a> cd uniquely_named_directory
hostname:/path/to/a/uniquely_named_directory> lsof | grep uniquely_named_directory

只有我有这样的文件夹或对该文件夹有写权限才能完成。或者,如果我知道该文件夹没有重命名并且名称足够特殊,我可以简单地尝试 "lsof | grep a".

(基于已删除答案中建议的想法...)。