find exec 不适用于命令别名?

find exec 不适用于命令别名?

我正在尝试find使用macOS 上-exec的命令别名执行 a 操作.bash_profile。该find命令显示

find: [alias cmd]: No such file or directory

当我使用

find ./ -iname *.doc -exec sha256 {} \;`

在哪里alias sha256="shasum -a 256"

运行无别名命令可以正常工作。

find应该能够访问定义的命令别名,或者这是一个错误find

答案1

选项-exec需要find纯可执行文件,而alias-es 是 shell 功能,这意味着它们仅当您在 shell 中时才存在。

-exec您可以通过运行run在 shell 中运行任何命令bash -c command。然而,要接受别名,shell 必须以交互方式运行。

您可以通过执行来欺骗交互性bash -ic sha256,但是由于您将别名定义放入其中,.bash_profile因此您还需要将其欺骗为“登录 shell”以及交互式 shell,因为该文件只能由所谓的“登录 shell”读取。也就是说,您应该执行bash -lic sha256.但这会比较慢并且会污染您的会话日志。

因此,我建议您将别名定义放在.bashrc文件中(如果还没有,则创建它),以便您的别名可以由更简单的bash -i而不是bash -li.

这将使你的整个命令如下:

find ./ -iname *.doc -exec bash -ic 'sha256 "$1"' -- {} \;

如果您确实必须保留别名定义,.bash_profile那么您的命令如下:

find ./ -iname *.doc -exec bash -lic 'sha256 "$1"' -- {} \;

答案2

不,您的别名源自 bash。find需要您的PATH环境变量中有一个可执行文件。 (如果你输入后which <cmd | alias>什么也没得到,find 会抱怨)

相关内容