我有以下目录树:
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'
有没有人对此有任何想法?
感谢。
答案 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')