【问题标题】:Error when using find and sed使用 find 和 sed 时出错
【发布时间】:2014-10-05 07:12:21
【问题描述】:

我正在尝试在 Linux 中使用 find 和 sed 命令执行以下操作:

  1. 在当前目录下发出命令时,它将编辑所有目录和子目录中的所有“.cbf”文件。

我一直在使用:thisthisthis 作为研究参考。

我当前不起作用的命令是:

find . -name "*.cbf" -print0 | xargs -0 sed -i '' -e 's/# change the header/# change the header to something/g'

我得到的错误是:sed: can't read : No such file or directory

我已经在包含 .cbf 文件的目录上方以及实际在目录中尝试了该命令。

有人可以帮我解决我做错的事情吗?我只是想在所有 .cbf 中编辑一行 我所在的子目录中的文件。

提前致谢

【问题讨论】:

标签: linux bash replace sed


【解决方案1】:

试试这个find/sed 命令:

find . -name "*.cbf" -print0 | xargs -0 -I {} sed -i.bak 's/# change the header/# change the header to something/g' {}

【讨论】:

  • 这似乎也有效,但同样的错误:文件名太长。同样,我拥有的文件是“cal_50_01_0001.cbf”
  • 那不是很长。尝试引用'{}',如:find . -name "*.cbf" -print0 | xargs -0 -I {} sed -i.bak 's/# change the header/# change the header to something/g' '{}'
【解决方案2】:

您的命令确实有效。您看到的错误与 -i '' 部分有关,这似乎是错误的。 -i 选项应该用于在进行就地编辑时为备份提供后缀,并且应该不带任何空格:-i.bak

如果您根本不需要备份,请不要在-i 之后提供任何额外选项。在您的情况下,sed 认为额外的'' 是一个文件名,实际上是在尝试打开它(引用strace 输出):

4000  open("", O_RDONLY)                = -1 ENOENT (No such file or directory)

因此,正确的命令不应该在-i 之后有''

【讨论】:

  • 所以我尝试了这个,我不再收到错误,但是一旦发出命令就会挂起。看起来它正在工作,但是我没有看到任何已编辑的 .cbf 文件。
  • 如果那里有很多文件,find 需要一些时间。您可以只运行find 部分,而不运行-print0,以查看需要多长时间。它递归地遍历当前目录中的所有文件。
  • 当我在没有 print0 的情况下发布时,它会非常快地显示我的所有文件,然后最后会出现:文件名太长。有任何想法吗?我的文件名为 cal_51_09_0627.cbf。我应该有一个标志来允许这个长度吗?
猜你喜欢
  • 2019-11-29
  • 2016-11-09
  • 2010-11-27
  • 2014-02-23
  • 2017-04-14
  • 2021-12-04
  • 2016-08-27
  • 2020-05-27
  • 1970-01-01
相关资源
最近更新 更多