find -exec 无法正常工作,为什么?

find -exec 无法正常工作,为什么?

我正在尝试使用 find 列出我的主目录下的所有文件名(基本名称,而不是完整路径)。我尝试这样做:

find ~/ -type f -exec echo $(basename "{}") ";"

但是我最终得到的是完整路径列表,而不仅仅是我想要的基本名称列表。我现在使用echo,但理想情况下,的结果$(basename "{}")应该是我想要编写的其他函数的参数。

为什么 basename 函数没有被正确应用?

答案1

shell$(...)在运行 之前会解释find。如果您希望 find shell 执行它,则需要停止 bash 替换它。我们可以这样做:

find ~/ -type f -exec sh -c 'echo $(basename "{}")' \;

这里的关键是单引号;Bash 不会触碰其中的任何内容。

相关内容