【问题标题】:Xargs doesn't listen to stdinXargs 不听标准输入
【发布时间】:2011-08-04 17:15:01
【问题描述】:

我尝试将 svn:keywords 属性添加到所有现有的 *.php 和 *.phtml 文件中。因此,我使用这个命令:

find . -regex '.*\.php' -o -regex '.*\.phtml'|xargs svn propset svn:keywords "Id"

根据Mateusz Loskot,这应该将属性添加到所有文件。如果我运行find . -regex '.*\.php' -o -regex '.*\.phtml',会找到所有文件,但 xargs 返回此消息:xargs: svn: No such file or directory

我还尝试导出找到的列表 (>> ~/temp) 并使用 xargs -a 从文件输入中读取参数,但没有成功。如何更新我的所有 php 文件?

附言。我使用的是 Kubuntu Linux Natty (11.04),它内置了 bash 4.2.8 和 xargs 4.4.2(如果可能的话)

【问题讨论】:

  • "svn: No such file or directory" 听起来你还没有安装 Subversion。 svn --version 返回什么?
  • 除了l0b0的解决方案,这是unix.stackexchange.com的问题
  • 啊!我安装了 kdesvn,效果非常好。我认为 kdesvn 会依赖于 svn,但它不是,因此没有安装 subversion。所以现在和 xargs 工作正常!谢谢 l0b0 :s
  • @Jurian Sluiman:如果错误消息告诉你它找不到'svn',你为什么认为xargs 不能完全按照它的设计来做?调试的第一条规则:假设错误信息是真实的。
  • @Bryan:xargs 使用文件作为输入参数(find 生成的列表)所以当找不到 file 时,我连接此文件未找到错误到作为参数给出的文件列表。所以我不判断错误信息,我只是尝试将其转换为可能的原因。

标签: linux bash xargs kubuntu


【解决方案1】:

你的命令看起来没问题。似乎xargsPATH 中找不到svn 命令。验证它是否可用或使用完整的文件路径(which svn 应显示svn 的完整路径)。

为了防止文件名中的空格问题,我建议find 使用-print0 参数,xargs 使用-0

find . -name '\*.php' -o -name '\*.phtml' -print0 | xargs -0 svn propset svn:keywords "Id"

【讨论】:

    【解决方案2】:

    您可以在这里尝试常用的技巧,例如:

    find ... | while read i ; do svn propset svn:keywords Id "$i" ; done
    

    【讨论】:

    • 在这种特定情况下,您将收到相同的错误。虽然您的解决方案可能适用于某些人,但解决 this 问题没有用处。另外,在这种情况下,xargs 正是正确的命令。建议使用 while/read 可能会使代码变得更糟而不是更好。
    • 我不同意。 如果问题与带有空格的文件名有关,这可能是一个解决方案,在问题中没有正确处理。
    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 2021-01-23
    • 2011-03-27
    • 1970-01-01
    • 2011-07-01
    • 2012-01-07
    • 1970-01-01
    相关资源
    最近更新 更多