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

  • 本文关键字:文件名 bash 插入 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"

使用带替换的参数展开:

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'

最新更新