如何将文件信息存储到数组中?

205

通过脚本的这一部分,我可以获得有关目录(和子目录)中文件的必要信息。我唯一需要的信息是文件的扩展名和大小。

for file in `find . -type f`; do
   size=$(stat -c '%s' ${file})
   file=$(echo "${file}" | awk -F/ '{print $NF}')
   ext=$(echo "${file}" | grep '..*\.' | awk -F. '{print $NF}' | grep '[A-Za-z0-9]')
if [ -z ${ext} ]; then
   echo "NOTE: no extention"
else
   EXTS="${EXTS}${ext}${newLine}"

它只是脚本的一部分。所以我的问题是:如何将这个信息放入数组中?我的意思是我想要一个包含元素的数组看起来像这样:

 c/123 /12 h/90 /0 txt/0

其中c,h和txt是文件扩展名,123、12和0是文件大小。因此,最近我可以分别使用大小和扩展名
,希望我已经将问题巧妙地解决了。对不起,错了。:)

muru

首先,不要做for file in $(find …)那是非常脆弱的。

现在,您可以使用-printf以下命令找到一起打印文件名和大小的方法,从而稍微简化代码

find . -type f -printf '%s.%f/'

然后,您可以使用awk来处理此输出,以按扩展名获取累积大小。请注意,我过去通常.将文件名(%f)和大小(%s分开,并在/其后添加了一个因此,我可以.在中用作字段分隔符awk由于文件名中唯一不允许使用的字符是/ASCII NUL,因此我可以放心/用作记录分隔符。

所以:

awk -F. -v RS=/ 'NF > 2 {size[$NF] += $1; next}
  {size["/"] += $1}
END {for (i in size) {print i,"/",size[i]}'

在这里,/如果没有扩展名,我将用作索引。

合并:

$ find . -type f -printf '%s.%f/' | awk -F. -v RS=/ 'NF > 2 {size[$NF] += $1; next}
{size["/"] += $1}
END {for (i in size) {printf "%s/%d\n", i, size[i]}}'
h/780
md/2509
tex/23961
c/13557
//5109
txt/2349291
sh/1166
py/12248

现在,如果您的扩展名不包含空格,则可以执行以下操作:

my_array=( $(find . -type f -printf '%s.%f/' | awk -F. -v RS=/ 'NF > 2 {size[$NF] += $1; next} {size["/"] += $1} END {for (i in size) {printf "%s/%d\n", i, size[i]}}') )

或者,您可以使用流程替换并读取以下各项中的每个条目:

my_arr=()
while IFS='' read -r entry
do
    my_arr+=( "$entry" )
done < <(find . -type f -printf '%s.%f/' | awk -F. -v RS=/ 'NF > 2 {size[$NF] += $1; next} {size["/"] += $1} END {for (i in size) {printf "%s/%d\n", i, size[i]}}')

像之前一样:

$ printf "%s\n" "${my_arr[@]}"
h/780
md/2509
tex/23961
c/13557
//5109
txt/2349291
sh/1166
py/12248

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将信息从文件存储到C中的内存中

如何将文件中的文本行存储到数组中并在Java中的所需位置打印行?

如何将文本文件存储到2d int数组中

如何将arrayList存储到Java中的数组中?

如何将数组存储到dynamoDB表中

如何将方法中的值存储到数组中?

GoWorkers如何将日志存储到文件中

如何将多个自定义对象从数组列表存储到Java中的json文件中?

如何将javascript数组或JSON存储到php中

我如何将数组的内容存储到Powershell中的json文件中

如何将Excel文件中的值存储到数组中进行测试

如何将文本文件中的值存储到2D Numpy数组中?

从.data文件读取到Java中,如何将信息存储在数组数组中?

如何将混合类型文件中的整数存储到数组中?爪哇

如何将Class的实例存储到文件中

如何将每个文本文件的内容存储到关联数组中?

如何将程序的输出存储到文件中?

如何将ArrayList或HashMap存储到文件或SharedPreferences中?

如何将很大的文本文件存储到数组中?

在VBA中,如何将整个excel表存储到包含所有相关子信息的易于访问的数组中?

如何将文件内容存储在数组中?

如何将数据存储到AngularJS数组中

如何将函数的输出存储到数组中

如何将Calendar类型的年份存储到数组中?

如何将先前的值存储到数组中

C 究竟是如何将信息存储到文件中的?

如何将字典数组存储到类变量中?

如何将数组数据存储到结构中?

如何将数字从文件存储到动态分类数组?