我有一个包含多个子目录的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 - ######
等。它不一定非精确,但这就是主意。
答案 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