Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否使用Linux命令删除除.git文件夹以外的所有文件?_Linux_Git - Fatal编程技术网

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

是否使用Linux命令删除除.git文件夹以外的所有文件?,linux,git,Linux,Git,在将新文件复制到分支之前,我想删除当前目录中除.git/文件夹之外的所有内容 linux命令的作用是什么?一种方法是使用rm-rf*,它将从文件夹中删除除点文件和点文件夹(如.git)以外的所有文件。然后,您可以逐个删除点文件和点文件夹,这样您就不会错过重要的点文件,如以后的.gitignore,.gittributes 另一种方法是将.git文件夹移出目录,然后返回并删除文件夹中的所有内容,并将.git文件夹移回 mv .git/ ../ cd .. rm -rf folder/* mv .g

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


linux命令的作用是什么?

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

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

mv .git/ ../
cd ..
rm -rf folder/*
mv .git/ folder/
cd folder

末尾的附加
rm
将删除特殊的
.gitignore
。如果您确实需要该文件,请将其取下。

正如Crayon在评论中提到的,简单的解决方案是将.git移出目录,删除所有内容,然后将其移回。但是,如果你想以一种奇特的方式来完成这项工作,
find
已经为你提供了支持:

find -not -path "./.git/*" -not -name ".git" | grep git
find -not -path "./.git/*" -not -name ".git" -delete
我放在那里的第一行是因为使用
find
,在运行
-delete
之前,我总是想再次检查以确保它找到了我认为的内容

编辑:有一个头脑呆滞的时刻,不只是从我的终端复制

Edit2:添加了
-not-name.git“
,这可以防止它尝试删除
.git
目录,并抑制错误。根据
find
尝试删除内容的顺序,它可能会在非空目录上失败。

应该找到所有名为.git的文件和目录 应该找到所有未命名为.git的文件和目录 删除找到的所有文件 确保发现的内容符合您的要求

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

如果您想在删除文件之前确定这些文件
通过管道将find命令传输到一个文件,并使用find和prune选项查看结果

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

编辑:用于两个目录
.git
dist

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

重置指数成本很低,因此

git rm -rf .
git clean -fxd


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

在大多数情况下,我只需要
rm-rf*
,它将跳过所有的点文件,然后根据需要手动管理任何剩余部分。您可以使用
find
,但也可以只使用
ls-A>/tmp/doit
,然后将
/tmp/doit
编辑到rm或rm-r,除了
.git
之外的所有内容,这通常更容易。或者只需将
.git
移动到一个diff临时文件夹,然后删除所有内容,然后将其移回。如果在克隆后立即需要此操作,则只需使用
-n
--无签出
)进行克隆即可选项:
git clone-n-b
-1用户希望删除除
.git
文件以外的所有文件,而这些文件与您似乎要删除的文件相同。@mu無 他们使用了grep-v,这将使比赛逆转。但是,当有更好的选项时,这仍然是一个非常尴尬的解决方案。@cincodenada另一个问题是,这不会删除文件夹中剩余的点文件。另外,最初代码中出现了一些错误,现在已经纠正了,这给了我
-bash:意外标记附近的语法错误
|'`@TimWolla你是对的,但是如果这些特殊字符不能/没有在文件名中使用,生活会更好运行
find-not-name.git | grep git
-您将看到您正在尝试删除
.git
目录中的所有文件,因为它们的文件名中没有“.git”。您正在查找-path和一些通配符。这就是为什么我发出的删除文件的命令前面有“-not”。我将回顾我的答案。我最初的评论有一个打字错误,我省略了-不,我已经改正了。请参阅我更正的评论,了解您为什么需要了解有关
find
命令如何工作的更多信息。是的,幸运的是,这是一个git repo,我可以在测试后重新克隆。它不会删除任何文件夹。虽然它可以工作,但它会给我错误提示,
find:'./scss::没有这样的文件或目录
,但仍然会删除所有内容。古怪的pxl,如果你能抑制我所遇到的错误,我将选择
没有这样的文件或目录
。@EricSteinborn:将stderr重定向添加到空文件我知道这是一个与初始问题不同的问题,但是你如何添加另一个被忽略的文件夹?说“dist/”和“.git”?这需要运行第一行吗?回答了我自己的问题,没有。所以这很好,我觉得没有引用的版本被更广泛地接受为正确答案。这和被接受的答案之间的主要区别不是引用(我有那些可以防止试图过早扩展全局的shell的引用),但是
-prune
。这是完成同一任务的另一种方式。至于第一行:无论何时运行
find-delete
,您都应该首先在不使用
-delete
的情况下运行它,以确保您没有做意外的事情。回答得好。用
-path“*/.git/*”
替换
-path“*/.git/*”
时,它可以排除位于一个公共目录下的多个git存储库。就像
projects/project1/.git
projects/project2/.git
一样,这可以直接在
projects/
目录中运行。很好!这是一个很好的git特定解决方案,我不知道,在这种情况下,这可能是一个更好的解决方案。这应该是选择的答案应该肯定是选择的答案来重置索引,无论是
git reset
还是
git checkout
都不适合我。我必须使用git reset--h
find . -not -name .git -exec rm -vf {} \;
find . -path ./.git -prune -o -exec rm -rf {} \; 2> /dev/null
find . -path ./.git -prune -o \( \! -path ./dist \) -exec rm -rf {} \; 2> /dev/null
git rm -rf .
git clean -fxd