【问题标题】:Problem with matching a specific extension only using find command in shell script仅在 shell 脚本中使用 find 命令匹配特定扩展的问题
【发布时间】:2018-09-22 02:00:48
【问题描述】:

我想使用 shell 脚本和一些 perl 命令对目录中的 XML 文件列表进行一些更改。 下面是 perl 命令的示例:

find "." -name "*.xml" | xargs perl -pi -e 's/\s+/ /g' *

所有 Perl 命令都可以正常工作,但问题是,shell 脚本甚至会在其自身上执行命令,换句话说,当我运行 shell 脚本时,perl 命令会使用所有其他 XML 文件更改 shell 脚本!!! 注意:XML 文件和 Shell 脚本位于同一目录下,不应该是这部分命令:

 find "." -name "*.xml" 

只匹配带有 XML 扩展名的文件!!!

有什么建议吗?!

【问题讨论】:

    标签: shell perl


    【解决方案1】:

    你有一个通配符 * 和你的命令的结尾!

    【讨论】:

    • 谢谢,它有效。但是你能解释一下,第一部分是做什么的吗?只匹配 .xml 文件!
    • 第一部分没问题。问题是 bash 将* 扩展为当前工作目录中所有文件名(以及所有不以'.'开头的文件)的列表。并将find 命令的所有输出传递给xargs 命令。这是你没想到的。
    • 再次感谢您的澄清。
    【解决方案2】:

    正如 Red Cricket 所指出的,您的命令末尾有一个 *摆脱它

    另外,我建议使用-execsed

    find -name '*.xml' -exec sed 's/\s\+/ /g' {} \;
    

    【讨论】:

      猜你喜欢
      • 2021-06-25
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多