将所有相同文件复制到一个位置并将文件名更改为 subdirectory_filename

将所有相同文件复制到一个位置并将文件名更改为 subdirectory_filename

我在不同的文件夹中有 conf.yml 文件,如下所示。

/var/loyalty-badge/conf/conf.yml
/var/loyalty-level/conf/conf.yml
/var/promotion/conf/conf.yml
/var/featured/conf/conf.yml

现在我希望所有的人conf.yml都复制一个文件夹,例如conf

目标文件应该是这样的

conf/loyalty-badge_conf.yml
conf/loyalty-level_conf.yml
conf/promotion_conf.yml
conf/featured_conf.yml

你能建议一个脚本吗?

答案1

您可以使用一个简单的通配符模式枚举…/conf/conf.yml文件。用一个for循环迭代文件。

for x in /var/*/conf/conf.yml; do …

您需要提取紧随其后的部分/var。你可以这样做外壳扩展功能:去除前缀和后缀。分两步进行:删除/var前缀,然后删除/conf/conf.yml后缀。

y=${x#/var}; y=${y%%/*}

现在把它们粘在一起。

for x in /var/*/conf/conf.yml; do …
  y=${x#/var}; y=${y%%/*}
  cp -p "$x" "conf/${y}_conf.yml"
done

请注意,大括号在 中是必需的${y}_conf.yml,因为会被解析为“后跟文本$y_conf.yml的值”。y_conf.yml

相关内容