Linux для удаления всех файлов, кроме папки .git?

Я хочу удалить весь текущий контент каталога, кроме папки .git/, прежде чем копировать новые файлы в ветку.

Для чего нужна команда linux?

Ответы

Ответ 1

С возможностью поиска и удаления.

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

Ответ 2

Сброс индекса дешев, поэтому

git rm -rf .
git clean -fxd

Тогда вы можете reset индекс (с git reset) или сразу перейти к проверке новой ветки.

Ответ 3

Как упоминал Crayon в комментариях, простым решением было бы просто переместить .git из каталога, удалить все, а затем переместить его обратно. Но если вы хотите сделать это странно, find вернул твою спину:

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

Первая строка, которую я вложил туда, потому что с find, я всегда хочу дважды проверить, чтобы убедиться, что она находит то, что я думаю, перед запуском -delete.

Изменить: имел момент braindead, не просто копировал с моего терминала.

Edit2: добавлен -not -name ".git", который не позволяет удалить каталог .git и подавляет ошибки. В зависимости от порядка find пытается удалить вещи, он может не работать в непустых каталогах.

Ответ 4

Один из способов - использовать rm -rf *, который удалит все файлы из папки, кроме dotfiles и dotfolders, таких как .git. Затем вы можете удалить dotfiles и dotfolders один за другим, чтобы вы не пропустили важные dotfiles, такие как .gitignore, .gitattributes позже.

Другим подходом было бы переместить вашу папку .git из каталога, а затем вернуться и удалить все содержимое папки и переместить папку .git.

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

Ответ 5

for i in `ls | grep -v ".git"` ; do rm -rf $i; done; rm .gitignore;

дополнительный rm в конце удалит специальный .gitignore. Снимите это, если вам нужен файл.

Ответ 6

должен найти все файлы и каталоги с именем .git

find .  -name .git

должен найти все файлы и каталоги, не названные .git

find . -not -name .git

удалите все файлы, которые вы найдете

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

убедитесь, что поиск делает то, что вы хотите

если вы хотите удалить каталоги, измените команду rm на rm -rvf Я включаю параметр v, чтобы увидеть удаленные файлы.

если вы хотите убедиться в файлах перед их удалением запустите команду find в файл и просмотрите результаты