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

时间:2016-07-12 07:29:03

标签: linux bash shell file filesystems

我有一个在文件夹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的工作方式(例如,同一目录可能有很多硬链接)。我不想得到路径的一些候选人,有没有办法找到一条绝对路径让我能够接近目录?

2 个答案:

答案 0 :(得分:2)

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

修改

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

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

正如hellerpop所说,您可能希望使用-cmin代替-mmin

答案 1 :(得分:0)

回答我自己的问题:我可以在一个唯一命名的子文件夹上使用lsof(我应该遍历它,因此它被视为"打开"):

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"。

(根据删除的答案中提出的想法......)。