计算linux中tgz文件子目录中的文件数

时间:2017-11-24 21:10:14

标签: linux count tar subdirectory

我有一个包含多个子目录的tgz文件。如何在不解压缩文件的情况下计算每个子目录中的文件数?我在Amazon EC2上使用Linux CentOS。

例如,我有一个来自http://dataset.cs.mcgill.ca/ubuntu-corpus-1.0/的目录为dialogues/[0-9]的tgz文件。具体来说,我正在查看这个tgz文件:http://dataset.cs.mcgill.ca/ubuntu-corpus-1.0/ubuntu_dialogs.tgz

这个tgz文件有dialogues作为主目录,然后是许多子目录,范围从1到999(?)。我希望能够计算所有子目录中的文件数。例如,dialogues/3有346,108个tsv文件。 dialogues/4有269,023个tsv文件。我希望能够看到所有子目录中的文件数量。是否有linux命令可以在不解压缩文件的情况下执行此操作?

我希望输出是子目录的名称,然后是子目录名称旁边的子目录所包含的文件数。类似的东西:

dialogs/3 - 346108
dialogs/4 - 269023
dialogs/5 - ######

等。它不一定非精确,但这就是主意。

2 个答案:

答案 0 :(得分:1)

您可以尝试以下命令:

tar tzf ubuntu_dialogs.tgz | grep dialogs | grep tsv | xargs -i dirname {} | uniq -c

我没有下载你的550 MB文件,而是我试着用它来计算我的一个档案中某个子目录中的jar文件:

tar tzf NetLogo-6.0.1-64.tgz | grep app/extensions | grep jar | xargs -i dirname {} | uniq -c

我得到了

  2 NetLogo 6.0.1/app/extensions/arduino
  1 NetLogo 6.0.1/app/extensions/array
  1 NetLogo 6.0.1/app/extensions/bitmap
  1 NetLogo 6.0.1/app/extensions/cf
  2 NetLogo 6.0.1/app/extensions/csv
  8 NetLogo 6.0.1/app/extensions/gis
  4 NetLogo 6.0.1/app/extensions/gogo
  6 NetLogo 6.0.1/app/extensions/ls
  2 NetLogo 6.0.1/app/extensions/matrix
 12 NetLogo 6.0.1/app/extensions/nw
  1 NetLogo 6.0.1/app/extensions/palette
  1 NetLogo 6.0.1/app/extensions/profiler
  2 NetLogo 6.0.1/app/extensions/r
  1 NetLogo 6.0.1/app/extensions/rnd
  1 NetLogo 6.0.1/app/extensions/sample
  1 NetLogo 6.0.1/app/extensions/sample-scala
  1 NetLogo 6.0.1/app/extensions/sound
  1 NetLogo 6.0.1/app/extensions/table
  6 NetLogo 6.0.1/app/extensions/vid
  3 NetLogo 6.0.1/app/extensions/view2.5d

(罐子的数量在第一栏)

答案 1 :(得分:0)

tar tf ex.tgz | sed -n 's!/[^/]\+$!!p' | sort | uniq -c

测试:

mkdir -p a/c
touch a/{1,2,3,4,5,6}
touch a/c/{1,2}
mkdir b
touch b/{1,2,3}
tar cvfz ex.tgz a b

然后输出:

6 a
2 a/c
3 b