Linux递归中的路径替换路径



给定一个称为FOO的主要目录,其中有许多子目录,我想转到每个子目录,找到路径:

/mango/pears/peanuts/butter/ 

/supplier

替换/mango/pears

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

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

有什么想法吗?这个问题不会像此

那样重命名文件。

找到包含/芒果/梨/花生/黄油/的foo中的每一个路径,您将使用:

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

最新更新