// remove a repo
find . -type f | grep -i ".git" | xargs rm
cd ..
rm -rf
I've made a quick setup just to illustrate, but let me explain the inner workings of these commands, specially the find and grep combination, that is the dangerous part here.
The tree I have here is:
Where the blue items are folders and the gray are files.
find . -type f will search and print all the files, starting on the actual folder up to all levels downward. And the grep -i ".git" will match to anything that has <any_ character>[gG][iI][tT], at any part of the name.
So, on my special and quick setup, I'll get this result::
This is definitely not the expected behavior, and is quite easy to be achieved (believe me :) ). If you pass this result into the xargs rm you may end up removing a lot of undesired files. And you have to take extra care wit this, because asking file by file if you want it to be deleted isn't the default behavior of the rm command. On RedHat, CentOS and Fedora there is an alias rm=rm -i, to make the confirmation mandatory by default.
cd .. is going up one level on the folders, and the rm -rf without any other arguments is doing absolutely nothing, but leaves space for a disaster.
My advice, when you want to remove a repository from a folder, is to make sure you are removing the right folder, so pass the complete path to the rm command, like so:
rm -rf /home/user/dev/my_program/.git
Always, when using rm -rf pass the complete path to the file/folder you want to remove.
Also, while I'm around, the find command is a real swiss knife. To find and remove the .git folder and remove it you can use (but is hardly not advised to):
find /home/user/dev/my_program -type d -name '.git' -delete
You may want to, for example, find all the repositories inside you home folder:
find /home/user -type d -name '.git'
You can also search for folders/files older than, newer than, ..., ..., ...
Hi!
Just as an advice, take real care with this:
I've made a quick setup just to illustrate, but let me explain the inner workings of these commands, specially the find and grep combination, that is the dangerous part here.
The tree I have here is:
Where the blue items are folders and the gray are files.
find . -type f
will search and print all the files, starting on the actual folder up to all levels downward. And thegrep -i ".git"
will match to anything that has<any_ character>[gG][iI][tT]
, at any part of the name.So, on my special and quick setup, I'll get this result::
This is definitely not the expected behavior, and is quite easy to be achieved (believe me :) ). If you pass this result into the
xargs rm
you may end up removing a lot of undesired files. And you have to take extra care wit this, because asking file by file if you want it to be deleted isn't the default behavior of therm
command. On RedHat, CentOS and Fedora there is an aliasrm=rm -i
, to make the confirmation mandatory by default.cd ..
is going up one level on the folders, and therm -rf
without any other arguments is doing absolutely nothing, but leaves space for a disaster.My advice, when you want to remove a repository from a folder, is to make sure you are removing the right folder, so pass the complete path to the
rm
command, like so:Always, when using
rm -rf
pass the complete path to the file/folder you want to remove.Also, while I'm around, the
find
command is a real swiss knife. To find and remove the.git
folder and remove it you can use (but is hardly not advised to):You may want to, for example, find all the repositories inside you home folder:
You can also search for folders/files older than, newer than, ..., ..., ...
Have fun and take care! :)
Thank you! That is very very helpful.
Namaste!