sed多个目录中的多个文件

时间:2012-12-20 13:20:54

标签: sed

我有以下目录树:

books>book(i)>cluster.pir

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

以下sed命令:

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

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

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

从'book'父目录开始,但我得到:

find: missing argument to `-exec'

有没有人对此有任何想法?

感谢。

3 个答案:

答案 0 :(得分:7)

查找格式为:

find -exec command {} \;

其中{}被文件名替换。

编辑:在你的情况下,这将成为:

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

我在Mac上使用带有sed的文件通配符时遇到问题,这种方法运行正常:

FILE_PATH="/some/path/"
sed -i '' "s|search|replace|g"  $(find ${FILE_PATH} -name '*.ext')