将目录名插入 bash 中分别命名的文件名

Insert dirnames into respectively named filenames in bash

在我的目录中,我有很多 *.yml 个文件,名称如下:

work-arran.yml
work-cap.yml
work-exposed.yml
work-humax.yml
work-instruc.yml
work-kiln.yml
work-lex.yml
work-merc.yml

以及具有相同名称但使用下划线而不是破折号的目录:

work_cap
work_exposed
work_humax
work_instruc
work_kiln
work_lex
work_merc

我想把 yaml 记录 grid_pool: dir_name_here 分别放入每个 *.yml 自动归档,其中 dir_name_here 是每个文件的名称 文件各自的目录。

试过这个,虽然它可以工作,但它附加了所需的行 *.yml 文件的下划线版本,而不是现有的虚线。

如何更改最后一个 fn.yml 以便它再次替换 _-

ls *.yml | sed 's/-/_/g' | sed 's/.yml//g' | xargs -n1 -I fn bash -c "echo '  grid_pool: fn' >> fn.yml"

使用带替换的参数扩展:

for file in *.yml ; do
    dirname=${file/-/_}
    echo "  grid_pool: ${dirname%.yml}" >> "$file"
done

您可以对 xargs 使用相同的方法,但我担心它会更慢,因为它会为每个文件启动一个新的 shell:

... | xargs -I fn bash -c 's=fn; echo "  grid_pool: fn" >> ${s/_/-}.yml'