给定一个名为FOO
的主目录,其中有很多子目录,我想去每个子目录,找到路径:
/mango/pears/peanuts/butter/
将/mango/pears
替换为/supplier
我理解sed
正是我要找的,但我can't
弄清楚了:
cd /FOO
sed -i 's|/mango/pears|/supplier|g' $(find . -type f)
有什么想法?此问题并不像this
那样寻求重命名文件答案 0 :(得分:0)
要查找FOO中包含/ mango / pears / peanuts / butter /的每条路径,您可以使用:
find /FOO -path "*/mango/pears/peanuts/butter/*"
如果你想修改结果列表,你可以通过sed管道输出(但没有-i,只有在文件改变的情况下才有意义):
find /FOO -path "*/mango/pears/peanuts/butter/*" -type f | sed 's|/mango/pears|/supplier|g'
sed -i适用于sed的每个结果,但会改变文件中的这些路径。这可能适用于您的命令,但容易受到文件名中的空格的影响。相反,您应该使用-exec参数:
find /FOO -path "*/mango/pears/peanuts/butter/*" -type f -exec sed -i 's|/mango/pears|/supplier|g' {} ";"