使用sed的find exec替换部分文件名并复制它

时间:2015-06-22 14:02:50

标签: bash sed find exec

我有一些需要转到适当位置的设置文件。 例如。 settings.location1,settings.location2,settings.location3需要转到相应的文件夹,即location1,location2和location3,并重命名为简单设置。

例如。

/some/path/settings.location1 - > /其他/路径/ LOCATION1 /设置

/some/path/settings.location2 - > /其他/路径/ LOCATION2 /设置

我想出了以下命令:

find /some/path/settings.* -exec cp {} /other/path/$(echo {} | sed 's/.*\.//')/settings \;

但由于某种原因,sed没有被执行。结果是

cp: cannot create regular file `/other/path//some/path/settings.location1/settings': No such file or director

似乎如果我单独运行它们,所有命令都会很好地执行,但如果我输入exec则不行。我做错了什么?

1 个答案:

答案 0 :(得分:0)

要完成这项工作,您需要在文件系统中不存在时创建中间文件夹。

您可以尝试:

find /some/path/settings.* -exec mkdir -p /other/path/$(ls -m1 {})/ && cp {} /other/path/$(ls -m1 {})/settings \;