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