![终端:跳转到使用 find 找到的目录](https://linux22.com/image/1113805/%E7%BB%88%E7%AB%AF%EF%BC%9A%E8%B7%B3%E8%BD%AC%E5%88%B0%E4%BD%BF%E7%94%A8%20find%20%E6%89%BE%E5%88%B0%E7%9A%84%E7%9B%AE%E5%BD%95.png)
对我来说这似乎是一个显而易见的问题,但我找不到答案...假设我想在我的项目中找到某个 txt 文件,然后在终端中输入:
find -name test.txt
结果我可能会得到类似这样的结果:
./directory1/directory2/directory3/directory4/test.txt
directory4
无需输入完整路径,如何跳转?
答案1
我会使用 bash 的历史记录支持来执行此操作。在任何命令之后,你可以使用以下命令再次引用它!!
:
[jk@pecola tmp]$ find . -name test.text
./directory1/directory2/directory3/test.text
ls -l
对上一个命令的输出执行:
[jk@pecola tmp]$ ls -l $(!!)
ls -l $(find . -name test.text)
-rw-rw-r-- 1 jk jk 0 Jan 23 20:49 ./directory1/directory2/directory3/directory4/test.text
在这个例子中,我们使用$(...)
语法将命令的输出作为另一个命令的参数。
因为!!
引用了最后运行的命令,所以如果我们想重新运行 find 命令,我们现在需要更加具体,因为ls
从那时起我们就运行了。我们可以使用!<match>
语法重新运行以 开头的最后一条命令<match>
[jk@pecola tmp]$ dirname $(!find)
dirname $(find . -name test.text)
./directory1/directory2/directory3
[jk@pecola tmp]$ cd $(dirname $(!find))
cd $(dirname $(find . -name test.text))
[jk@pecola directory4]$ ls
test.text
我还发现这对于重新执行需要 sudo 的命令很方便:
[jk@pecola tmp]$ adduser newuser
adduser: Only root may add a user or group to the system.
[jk@pecola tmp]$ sudo !!
sudo adduser newuser
答案2
如果终端会话在 GUI 中,您可以用鼠标选择文本 (左边按钮),然后单击中间鼠标按钮。