我怎样才能将 find 命令与其他命令结合起来,这样我就不必导航到文件夹了?

我怎样才能将 find 命令与其他命令结合起来,这样我就不必导航到文件夹了?

有时我想运行某些文件,但不想一直导航到该文件夹​​。

如果我知道文件名并且find -name file_name.py只返回一个结果,我可以使用它吗?

例如,不需要一直导航到特定文件夹并调用:

python file_name.py

我可以写:

python [ find -name file_name.py ] 

或者

python [ locate file_name.py ]

或者是“在整个计算机中搜索此文件名并使用它”的某种变体?最好在一行中。

答案1

我认为您正在寻找:

python $(find -name myscript.py)

答案2

将此行添加shopt -s globstar到主目录中的文件中.bashrc。(如果只是尝试一下,请在命令行中键入此内容,它只会在您当前的 shell 中生效。)

然后你可以使用**/它来表示“在当前目录或子目录中递归地执行”,即与简单find命令相同。

python **/myscript.py

警告:**/遍历目录的符号链接,而find不遍历。在 bash 中,您无法避免这种情况。在 zsh 中,**/开箱即用,不会遍历符号链接(在***/极少数情况下,您需要遍历符号链接)。

答案3

只是为了表明做事总是有多种方法(即使不使用 Perl):

find -name file_name.py -exec python {} \;

也可以。 find 的 exec 选项对找到的每个文件执行以下命令。在此命令中,{}充当文件的占位符,并\;表示命令的结束。

答案4

另一个:

xargs -0 python < <(find -name my_script.py -print0 -quit)

现在,作为家庭作业,尝试确定这里介绍的所有方法的优点、缺点和差异。

相关内容