3

我有以下目录树:

books>book(i)>cluster.pir

其中 book(i) 是一组从 1 到 1023 的子目录,每个子目录都包含一个名为 cluster.pir 的文件夹。

以下 sed 命令:

sed -i '/>/d' ./*.pir

将删除文件中包含 '>' 的任何行,用于带有 .pir 分机的任何文件,这很好,但我的各种 .pir 文件位于它们自己的 book(i) 目录中。如何让命令跨越所有目录?我试过了:

find ./*.pir -type f -exec sed -i '/>/d' ./*.pir

在“书”父目录中开始时,但我得到:

find: missing argument to `-exec'

有人对此有任何想法吗?

谢谢。

4

3 回答 3

10

查找的格式为:

find -exec command {} \;

其中 {} 替换为文件名。

编辑:在您的情况下,这将变为:

find ./*.pir -type f -exec sed -i '/>/d' {} \;

这将在每个文件上调用 sed。

于 2012-12-20T13:25:20.660 回答
5

您可以添加通配符以跨越所有目录:

sed -i '/>/d' ./book*/*.pir
于 2012-12-20T13:58:07.600 回答
0

我在我的 Mac 上使用文件通配符和 sed 时遇到了问题,这种方法效果很好:

FILE_PATH="/some/path/"
sed -i '' "s|search|replace|g"  $(find ${FILE_PATH} -name '*.ext')
于 2018-03-27T15:30:04.683 回答