终端:跳转到使用 find 找到的目录

终端:跳转到使用 find 找到的目录

对我来说这似乎是一个显而易见的问题,但我找不到答案...假设我想在我的项目中找到某个 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 中,您可以用鼠标选择文本 (左边按钮),然后单击中间鼠标按钮。

相关内容