bash脚本列出目录的内容,以逗号分隔

时间:2010-11-13 00:39:05

标签: bash scripting shell

我需要一个bash脚本,它以下列方式递归列出目录中的文件:

filename,size (in kb),numeric value (in filename)

e.g:

/directory/1/file-100.txt,50,100
/directory/1/file-200.txt,45,200
/directory/2/file-100.txt,20,100
/directory/2/file-500.txt,100,500

另外,我需要它忽略以“.svn

开头的目录

3 个答案:

答案 0 :(得分:5)

尝试一下:

find -name ".svn" -prune -o -type f -printf "%p,%k,\n" | sed 's/\([^-]\+-\([0-9]\+\)\..*\)/\1\2/'

只使用了两个实用程序(可能需要GNU版本)。

答案 1 :(得分:2)

也许不是最好的方式,但应该有效:

find /path -type f | grep -v '.svn' | xargs du -k |\
  awk '{print $2","$1}' | sed 's/-\([0-9]*\)\(\..*\)/-\1\2,\1/'

答案 2 :(得分:0)

功能

  • 避免可能的昂贵遍历.svn-dirs。
  • 找到报告大小而不是'du'
  • 让awk做更多魔法,不需要sed。

对解决方案的建议:

$ find . -path '*/.svn' -prune -o -type f -printf '%p %k\n' |\
  awk -v OFS=, '{ print $1, $2, gensub(/[^0-9]*([0-9]*)/, "\\1", "g", $1) }'

<强>找到选项:

  • -path ... 匹配.svn目录
  • -prune 如果匹配(-path)是目录,请不要下降。
  • -o ...或......
  • -type f 仅匹配文件。
  • -printf ... 以1K块(%k)打印包含路径(%p)和大小的自定义行。

<强> AWK:

编辑:根据Dennis的建议更新。不敢相信我实际上错过了%k,我责备凌晨3点。