linux以递归方式替换文件中路径的路径

时间:2018-03-28 15:30:45

标签: linux sed path

给定一个名为FOO的主目录,其中有很多子目录,我想去每个子目录,找到路径:

/mango/pears/peanuts/butter/ 

/mango/pears替换为/supplier

我理解sed正是我要找的,但我can't弄清楚了:

cd /FOO
sed -i 's|/mango/pears|/supplier|g' $(find . -type f)

有什么想法?此问题并不像this

那样寻求重命名文件

1 个答案:

答案 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' {} ";"