我的结构如下:
./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
我尝试了find
和exec
的各种变体,但没有运气。
find . -type f -name "sitemap.html" -printf "cp %p %p \n" | sed 's/sitemap.html$/psitemap.html\1/g'
在这里,我尝试用psitemap.html替换最后一个sitemap.html并失败。
如何轻松复制和重命名这些文件?
答案 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
。