【问题标题】:How does command substitution work with find?命令替换如何与 find 一起使用?
【发布时间】:2011-08-26 11:07:36
【问题描述】:

我有以下命令

find . -name "*.tiff" -exec echo `basename -s .tiff {}` \;

我希望这可以打印我所有的 .tiff 文件,而不需要它们的文件扩展名。我得到的是

./file1.tiff
./file2.tiff
...

命令,

find . -name "*.tiff" -exec basename -s .tiff {} \;

成功了

file1
file2
...

这不应该是echo的输入吗?

【问题讨论】:

    标签: macos shell unix find


    【解决方案1】:

    使用单引号字符 (') 而不是反引号 (`) - 将命令放在反引号中会导致它被执行并被命令中的输出替换。 另外,修改命令以去掉echo,如下所示:

    find . -name "*.tiff" -exec 'basename -s .tiff {}' \;
    

    这将对每个找到的文件执行basename

    【讨论】:

      【解决方案2】:

      反引号的内容在 find 命令之前执行 - 只产生在 find 命令行中使用的占位符 {} - 因此你的结果。您可以随时使用set -x 来检查 shell 的功能。

      【讨论】:

      • 我正在尝试使用 tiff2ps 转换一批图像,有什么想法吗?
      • @Steinbitglis,试试:for i in `ls -R *.tiff`; do tiff2ps $i > `basename $i .tiff`.ps; done(未测试)
      猜你喜欢
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 2021-07-16
      • 2021-12-25
      • 1970-01-01
      • 2019-02-18
      相关资源
      最近更新 更多