在bash中将dirnames插入分别命名的文件名中

时间:2015-11-10 12:30:11

标签: bash glob

在我的目录中,我有很多*.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"

1 个答案:

答案 0 :(得分:3)

使用带替换的参数扩展:

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'