用于捕获 CSV 格式的文件名和文件大小的 Shell 脚本

用于捕获 CSV 格式的文件名和文件大小的 Shell 脚本

我在某个文件夹中有许多 zip 文件。我想以包含文件名和大小的 csv 格式捕获文件名和文件大小,每天一个文件。文件名确实包含日期。

文件位于/somedirectory/archive/test

-rw-rw-r--+ 1 AAAA AAAA 9.3M May  30 17:09 XXXXX_20140530_0401_28.txt.gz
-rw-rw-r--+ 1 AAAA AAAA 9.3M May  30 17:09 XXXXX_20140530_0401_29.txt.gz
-rw-rw-r--+ 1 AAAA AAAA 9.3M May  31 17:09 XXXXX_20140531_0401_01.txt.gz

现在我想创建一个 cronjob 每天运行并捕获相同的 csv。

测试30052014.csv

"XXXXX_20140530_0401_28.txt.gz","9.3","May 30"
"XXXXX_20140530_0401_29.txt.gz","9.3","May 30"

测试31052014.csv

"XXXXX_20140531_0401_01.txt.gz","9.3","May 31"

答案1

如果您的系统有 GNU coreutils,那么获取人类可读文件大小的最简单、最可靠的方法可能是通过命令du。要将输出打印成您想要的格式,使用 bash 您可以执行以下操作:

#!/bin/bash

while read -rd $'\0' size name
do 
  printf '"%s","%s"\n' "${name##*/}" "$size"
done < <(du -0h /somedirectory/archive/test/XXXXX_20140530_*.gz)

答案2

为什么不直接使用一个快速的 shell 脚本(为了示例,我们将其称为 size.sh):

#!/bin/bash
IFS='
'
for LINE in $(ls -1s --block-size=k|tail -n +2); do 
  echo $LINE|awk '{ print "\""$2"\",\""$1"\"" }'
done

它以千字节为单位一致输出大小,您可以将脚本的输出重定向到您的文件。

size.sh > $(date +%Y-%m-%d).csv

相关内容