如何在“find -exec”中的“\{\}”上使用命令扩展?

如何在“find -exec”中的“\{\}”上使用命令扩展?

我想通过找到一些目录

find /path/to/a/dir -type d  -links 2 

然后对于 找到的每个路径名find,假设存储在变量中pathname,我想

stow -d "$(dirname "$pathname")" -t /home/t/bin "$(basename "$pathname")" 

我怎样才能将上述内容与find -exec类似内容结合起来:

find /path/to/a/dir -type d  -links 2 -exec stow -d "$(dirname \{\})" -t /home/t/bin "$(basename \{\})" \;

我认为它不起作用,因为 shell 在运行之前执行命令替换,并且在命令替换中find尚未找到要替换的路径名。\{\}

谢谢。

答案1

你把它包装在一个sh -c命令中

find /path/to/dir -type d -links 2 -exec sh -c 'stow -d "$(dirname "$1")" -t /home/t/bin "$(basename "$1")"' sh {} \;

相关内容