2011-03-07 63 views
3

我要归档一个包含大量垃圾的旧大型项目。我希望我永远不会再需要它,但我想把所有重要的东西都放在版本控制之下。由于项目混乱,要说什么来源和什么可以消失并不容易(没有makefile,没有make clean,没有)。 所以我想放在那里几乎所有,只考虑排除最大的文件。如何找出要提交的文件的空间需求?

如何列出要提交(或将要提交)的文件以及它们的大小?

我可以写一个脚本或任何其他,但希望有一个更简单的解决方案。我正在Cygwin下工作,唯一可用的gui是git gui,它不显示文件大小。否则,它对我所需要的是完美的。

+1

“但我想把所有重要的东西都放在版本控制之下“ - 当然重要的东西已经在源代码控制之下了? – 2011-03-07 00:47:02

+0

不,这是一个没有使用VC的人的单人项目。当我处理它时,我只使用SVN进行了更改,后来将其转换为GIT,现在我想添加所有其他可能重要的文件,所以它在某处安全以防万一... – maaartinus 2011-03-07 01:08:16

回答

2

你可以试试这个。它会查找大于1M的所有文件,并将其从大到小排序。打印的文件大小是按字节:

cd ~/files_to_archive 
find . -type f -size +1M -printf '%s %p\n' |sort -nr 

输出:

74751072 ./linux-2.6.38-rc4.tar.bz2 
34686037 ./git-source.tar.gz 
14026384 ./Python-2.7.tar.gz 

更新时间:环比由find和返回的文件打印他们git状态:

git ls-files -t `find . -type f -size +1M |xargs` 
+0

但它不告诉我他们已经被追踪。那里有很多大文件,其中一些很重要,其中一些已经被追踪,大混乱... – maaartinus 2011-03-07 03:00:33

+0

哎呀,听起来很混乱!我更新了答案,希望这会更有用。 – samplebias 2011-03-07 03:29:30

+0

这看起来好多了,除了'git ls-files -t'似乎没有为未跟踪文件打印任何内容。这个手册页让我变成了'git status --porcelain',它会打印这个文件的'''',除非它们被忽略。一个简单的'grep'就解决了。 – maaartinus 2011-03-07 06:49:18

0

我不知道混帐,但如果你正在使用水银,你可以使用的组合:在目录树的顶部

ls -laS 
hg status 
0

对于第一近似,du -sk .会给你需要的空间。在你做git gc之后,它可能被高估了。

但是在你达到退役项目的时间点之前,你应该早已使用版本控制。