Ответ 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
Я хочу удалить весь текущий контент каталога, кроме папки .git/
, прежде чем копировать новые файлы в ветку.
Для чего нужна команда linux?
С возможностью поиска и удаления.
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
Тогда вы можете reset индекс (с git reset
) или сразу перейти к проверке новой ветки.
Как упоминал 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
пытается удалить вещи, он может не работать в непустых каталогах.
Один из способов - использовать rm -rf *
, который удалит все файлы из папки, кроме dotfiles и dotfolders, таких как .git
. Затем вы можете удалить dotfiles и dotfolders один за другим, чтобы вы не пропустили важные dotfiles, такие как .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
. Снимите это, если вам нужен файл.
find . -name .git
find . -not -name .git
find . -not -name .git -exec rm -vf {} \;
убедитесь, что поиск делает то, что вы хотите
если вы хотите удалить каталоги, измените команду rm на rm -rvf
Я включаю параметр v
, чтобы увидеть удаленные файлы.
если вы хотите убедиться в файлах перед их удалением запустите команду find в файл и просмотрите результаты