如何将“find”的输出通过管道传输到“cd”?

vyb*_*hav 6 find pipe

我应该怎么做才能在文件夹列表中搜索文件并将当前目录更改为文件目录?

我试过了, find -name script.py | cd但没有用(不是我所期望的)。

感谢您的帮助!

Flo*_*sch 11

cd不从 stdin 读取,因此您无法将文件夹名称通过管道传输到其中。但是您可以使用"$(...)"命令的输出作为以下参数的参数cd

cd "$(find -name script.py -type f -printf '%h\n' -quit)"
Run Code Online (Sandbox Code Playgroud)

-printf '%h\n'告诉find只输出到包含文件的文件夹。

-quitfind在找到第一个匹配的文件后告诉退出。


nux*_*nux 5

您可以使用此代码:

cd "$(dirname "$(find / -type f -name test | head -1)")"
Run Code Online (Sandbox Code Playgroud)

如您所见,它将使用命令从根目录的顶部搜索find /,然后,它会列出名为 test- 的常规文件name test,最后它会切换到其目录。

注意:通过的管道head -1将过滤掉除第一个之外的所有内容。

dirname - 从文件名中去除非目录后缀

cd 更改目录