如何在目录中创建包含文件名、大小和版本的 json?

如何在目录中创建包含文件名、大小和版本的 json?

我想创建保存目录中文件名称、大小和文件的版本的 json。这里的版本号是写在每个文件内部的字符串(每个文件都是一个包含类似函数的 lua 文件

function M.version()
    return "1.0"
end

将会告诉版本号)我需要一个 bash 脚本来创建由文件名、大小和其对应版本(从文件内部获取)组成的 json

例如:我有一些 lua 文件,在“/home/anudeep/source”中有 afile.lua bfile.lua、cfile.lua、dfile.lua、efile.lua、ffile.lua、gfile.lua,并且每个 lua 文件里面都有版本函数,例如

function M.version() return "1.0" end

或者

function gfile.version() return "1.0" end

我的 json 文件应该是 file_info.json 包含

{"avaible_files":
   [
      ["afile.lua",2056,"1.0"],
      ["bfile.lua",948,"2.0"],
      ["cfile.lua",1054,"1.0.1"],
      ["dfile.lua",3085,"3.0"],
      ["efile.lua",9685,"1.0.0"],
      ["efile.lua",6985,"1.0.2"],
      ["ffile.lua",9996,"3.1.0"],
      ["gfile.lua",785,"2.0.0"]
    ]
}

我对 shell/bash 脚本不太了解,也不太熟悉。在此过程中,尝试使用此命令获取文件名和版本

grep -rs -A1 version .| awk '/return/ {print $ response is ./afile.lua-"1.0"

得到这个回应

./bfile.lua-"2.0" ./cfile.lua-"1.0.0.1" ./dfile.lua-"3.0" ./efile.lua-"1.0.0" ./ffile.lua-"1.0.2" ./gfile.lua-"2.0.0"

但无法编写脚本来创建 json。小帮助也值得赞赏,提前致谢

答案1

我仍然不确定你到底在要求什么,但是你可以考虑类似

#!/bin/bash

shopt -s nullglob

chunk=1000

for f in *.txt; do 
  size=$(stat -c %s "$f")
  parts=$(( size / chunk + (size % chunk > 0) ))
  vers=$(grep -sm1 -Po 'return\s+\K\S+' "$f")

  printf '["%s",%d,%s,%d]\n' "$f" "$size" "$vers" "$parts"

done | jq -n '{"available_files": [inputs]}'

您可以将实际的拆分命令合并到同一个循环中,如下所示split -b "$chunk" -d "$f" "$f"

相关内容