Linux命令删除.git文件夹以外的所有文件?

在将新文件复制到分支之前,我想删除 .git/文件夹之外的所有当前目录的内容

什么是Linux的命令呢?

Solutions Collecting From Web of "Linux命令删除.git文件夹以外的所有文件?"

使用查找和修剪选项。

 find . -path ./.git -prune -o -exec rm -rf {} \; 2> /dev/null 


编辑:两个目录.gitdist

 find . -path ./.git -prune -o \( \! -path ./dist \) -exec rm -rf {} \; 2> /dev/null 

重置索引很便宜,所以

 git rm -rf . git clean -fxd 

然后你可以重置索引(使用git reset )或直接检出一个新的分支。

正如蜡笔小新在评论中提到的那样,简单的解决办法就是将git移出目录,删除所有内容,然后再将其移回原处。但是如果你想这样做的话, find你的回头:

 find -not -path "./.git/*" -not -name ".git" | grep git find -not -path "./.git/*" -not -name ".git" -delete 

我放在那里的第一行是因为在find ,我总是想仔细检查一遍,以确保找到我认为是的东西,然后运行-delete

编辑:有一个braindead的时刻,不只是从我的终端复制。

编辑2:添加-not -name ".git" ,防止它试图删除.git目录,并抑制错误。 根据命令find尝试删除的东西,它可能会失败的非空目录。

一种方法是使用rm -rf * ,它将从文件夹中删除所有文件,除了像.git这样的点文件和点文件夹。 然后,您可以逐个删除点文件和点文件夹,以便日后不会错过重要的点文件,如.gitignore.gitattributes

另一种方法是将.git文件夹移出目录,然后返回并删除该文件夹的所有内容,然后移动.git文件夹。

 mv .git/ ../ cd .. rm -rf folder/* mv .git/ folder/ cd folder 
 for i in `ls | grep -v ".git"` ; do rm -rf $i; done; rm .gitignore; 

最后的额外rm将删除特殊的.gitignore 。 如果你确实需要这个文件,那就关闭它。

应该找到所有名称为.git的文件和目录

 find . -name .git 

应该找到所有没有名为.git的文件和目录

 find . -not -name .git 

删除您找到的所有文件

 find . -not -name .git -exec rm -vf {} \; 

确保发现正在做你想做的事情

如果要删除目录,请将rm命令更改为rm -rvf我包含v选项以查看被删除的文件。

如果要在删除文件之前确定文件,请将find命令传输到文件并查看结果