从目录中提取文件并将文件的名称和大小(以 KB 为单位)保存在 CSV 文件中

从目录中提取文件并将文件的名称和大小(以 KB 为单位)保存在 CSV 文件中

我想从目录 /var/log 检索所有 .log 文件,将结果以及每个日志文件各自的文件大小(以 kB 为单位)存储在 csv 文件中。

我首先使用 find 获取文件:

find . -type f -name "*.log"

如何将它们保存在文件中?

答案1

使用 GNU find

find . -name '*.log' -printf '%p,%s\n'

这将打印文件名和文件大小(以字节为单位),并用逗号分隔。如果您只需要文件的基本名称(即没有路径),请使用%f而不是。%p

要显示为千字节(10^3 单位,“KB”)或千比字节(2^10 单位,“KiB”),您需要对输出进行后处理。看将字节计数转换为人类 KiB MiB 等的标准工具;像du,ls1有几种方法可以做到这一点。使用awkorperl可能是最简单的,因为您只想修改每行的第二个字段。

答案2

这是我最好的猜测,然后将内容放入主目录中名为 var-log.csv 的文件中

find . -type f -name "*.log" -exec ls -s {} \; > ~/var-log.csv

答案3

这可能有帮助:

ls -l --block-size=K *.log | awk {'print $9","$5'} > nameSize.csv

答案4

ls -l 将为您提供所需的所有数据以及更多信息:

: ls -l /var/log/*.log
...
-rw-r--r-- 1 root root 123456 Jul 11​​ 17:28 /var/log/xinetd.log
...

然后你可以使用 awk 提取你需要的字段:

: ls -l /var/log/*.log | awk '{print $5,$9}'
123456 /var/log/xinetd.log

如果您希望它与其他一些字符分开:

: ls -l /var/log/*.log | awk '{print $5","$9}'
123456,/var/log/xinetd.log

相关内容