被另一个用户移动后的当前目录
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".
(基于已删除答案中建议的想法...)。
我有一个在文件夹 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".
(基于已删除答案中建议的想法...)。