复制并重命名

时间:2017-09-08 07:31:01

标签: linux bash shell find

我的结构如下:

./tr-it/sitemap.html
./en-nl/sitemap.html
./fr-ca/sitemap.html
./it-it/sitemap.html
./fr-fr/sitemap.html
./tr-ir/sitemap.html
./en-it/sitemap.html
./en-us/sitemap.html
./en-kr/sitemap.html
./tr-ru/sitemap.html
./en-fr/sitemap.html
./en-int/sitemap.html
./en-tr/sitemap.html
./tr-us/sitemap.html
./tr-nl/sitemap.html
./en-ar/sitemap.html
./en-ir/sitemap.html
./en-se/sitemap.html
./es-us/sitemap.html
./en-ru/sitemap.html
./en-es/sitemap.html
./tr-es/sitemap.html
./es-ar/sitemap.html
./en-ca/sitemap.html
./pt-pt/sitemap.html
./tr-tr/sitemap.html

我需要将这些文件复制并重命名为:

./en-us/sitemap.html to ./en-us/psitemap.html
./en-es/sitemap.html to ./en-es/psitemap.html

我尝试了findexec的各种变体,但没有运气。

find . -type f -name "sitemap.html" -printf "cp %p %p \n" | sed 's/sitemap.html$/psitemap.html\1/g'

在这里,我尝试用psitemap.html替换最后一个sitemap.html并失败。

如何轻松复制和重命名这些文件?

2 个答案:

答案 0 :(得分:4)

使用参数扩展 - 替换:

for file in ./*/sitemap.html ; do cp "$file" "${file/sitemap/psitemap}" ; done

答案 1 :(得分:4)

您可以使用-execdir选项:

find . -type f -name "sitemap.html" -execdir echo mv {} psitemap.html \;

如果对输出感到满意,请从上面的命令中删除echo