命令替换如何与 find 一起使用?
我有以下命令
find 。 -name "*.tiff" -exec echo `basename -s .tiff {}` \;
我希望这会打印我所有的 .tiff 文件,而不带文件扩展名。我得到的是
./file1.tiff
./file2.tiff
...
命令
find 。 -name "*.tiff" -exec basename -s .tiff {} \;
确实会产生
file1
file2
...
这不应该是 echo 的输入吗?
I have the following command
find . -name "*.tiff" -exec echo `basename -s .tiff {}` \;
I expect this to print all my .tiff-files without their file extensions. What I get is
./file1.tiff
./file2.tiff
...
The command,
find . -name "*.tiff" -exec basename -s .tiff {} \;
does yield
file1
file2
...
Is this not supposed to be the input of echo?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
反引号的内容在 find 命令之前执行 - 只产生占位符
{}
,该占位符在 find 命令行中使用 - 因此您的结果。您始终可以使用 set -x 来检查 shell 的功能。The content of the backticks is executed before the find command - yielding just the placeholder
{}
, which is used in the find command line - hence your result. You can always useset -x
to examine what the shell is up to.使用单引号字符 (') 而不是反引号 (`) - 将命令放在反引号中会导致该命令被执行并被命令中的输出替换。
另外,修改命令以消除
echo
,如下所示:这将在每个找到的文件上执行
basename
。Use single-quote characters (') instead of backticks (`) - putting a command in backticks causes it to be executed and replaced by its output in your command.
Also, modify the command to get rid of the
echo
, like this:This will execute
basename
on each found file.