답변:
이것은 사용하려는 쉘에 따라 다릅니다.
Windows에서 cmd 쉘을 사용하는 경우 다음이 작동합니다.
FOR /F "tokens=*" %%G IN ('DIR /B /AD /S bin') DO RMDIR /S /Q "%%G"
FOR /F "tokens=*" %%G IN ('DIR /B /AD /S obj') DO RMDIR /S /Q "%%G"
bash 또는 zsh 유형 셸 (예 : Windows 또는 대부분의 Linux / OS X 셸의 git bash 또는 babun)을 사용하는 경우 원하는 작업을 수행하는 훨씬 더 간결하고 간결한 방법입니다.
find . -iname "bin" | xargs rm -rf
find . -iname "obj" | xargs rm -rf
OR로 한 줄로 줄일 수 있습니다.
find . -iname "bin" -o -iname "obj" | xargs rm -rf
파일 이름 디렉토리에 공백이나 따옴표가 포함되어 있으면 find는 해당 항목을있는 그대로 보내며 xargs는 여러 항목으로 분할 될 수 있습니다. 쉘에서 지원하는 그 경우, -print0
그리고 -0
주위에 작동이 짧은오고, 위의 예제가 될 수 있도록 :
find . -iname "bin" -print0 | xargs -0 rm -rf
find . -iname "obj" -print0 | xargs -0 rm -rf
과:
find . -iname "bin" -o -iname "obj" -print0 | xargs -0 rm -rf
Powershell을 사용하는 경우 다음을 사용할 수 있습니다.
Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
아래의 Robert H의 답변 에서 볼 수 있듯이, 당신이 아무것도 투표하지 않으려는 경우 나 대신 powershell 답변에 대한 크레딧을 제공하십시오. :)
물론 안전한 곳에서 먼저 선택한 명령을 실행하여 테스트하는 것이 좋습니다.
나는이 실을 발견하고 빙고를 얻었다. 조금 더 검색하면이 파워 쉘 스크립트가 나타났습니다.
Get-ChildItem .\ -include bin,obj -Recurse | ForEach-Object ($_) { Remove-Item $_.FullName -Force -Recurse }
나는 내가 여기서보고있을 때 답을 찾지 못했다는 점을 고려하여 공유하고 싶다고 생각했다.
gci -include bin,obj -recurse | remove-item -force -recurse
)
-WhatIf
플래그가 먼저 테스트 되는 것을 좋아해서 다음과 같이 끝났습니다. $foldersToRemove='bin','obj';[string[]]$foldersToIgnore='ThirdParty';Get-ChildItem .\ -Include $foldersToRemove -Recurse|Where-Object{$_.FullName -inotmatch "\\$($foldersToIgnore -join '|')\\"}|Remove-Item -Force -Recurse -WhatIf
(여기서 한 줄로 약간 지저분합니다.))
이것은 나를 위해 일했다 :
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
이 답변 을 기반으로 superuser.com
나는 이것을 달성하기 위해 항상 솔루션에 새로운 목표를 추가하는 데 사용합니다.
<Target Name="clean_folders">
<RemoveDir Directories=".\ProjectName\bin" />
<RemoveDir Directories=".\ProjectName\obj" />
<RemoveDir Directories="$(ProjectVarName)\bin" />
<RemoveDir Directories="$(ProjectVarName)\obj" />
</Target>
그리고 명령 줄에서 호출 할 수 있습니다
msbuild /t:clean_folders
이것은 배치 파일 일 수 있습니다.
msbuild /t:clean_folders
PAUSE
나는 그것을하기 위해 powershell 스크립트 를 작성 했습니다.
장점은 삭제 된 폴더의 요약을 인쇄하고 하위 폴더 계층 구조를 무시하도록 지정한 경우 무시한 것입니다.
$_ -notmatch 'node_modules'
조건을 추가하겠습니다$FoldersToRemove
아무것도 나를 위해 일하지 않았다. 디버그 및 릴리스를 위해 bin 및 obj 폴더의 모든 파일을 삭제해야했습니다. 내 해결책 :
1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 언로드 한 다음 다시 마우스 오른쪽 버튼을 클릭하여 편집하고 하단으로 이동하십시오.
2. 삽입
<Target Name="DeleteBinObjFolders" BeforeTargets="Clean">
<RemoveDir Directories="..\..\Publish" />
<RemoveDir Directories=".\bin" />
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>
3. 프로젝트를 저장하고 다시로드 한 후 마우스 오른쪽 버튼으로 클릭하고 정리합니다.
빌드하기 전에 bin 및 obj를 삭제하려면 프로젝트 파일에 추가하십시오.
<Target Name="BeforeBuild">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
다음은 기사입니다. 빌드 또는 배포 전에 bin 및 / 또는 obj 폴더를 제거하는 방법
CleanProject를 보면 bin 폴더, obj 폴더, TestResults 폴더 및 Resharper 폴더가 삭제됩니다. 소스 코드도 제공됩니다.
에서 Windows PowerShell을 사용하여 빈과 ReSharper에서 폴더를 OBJ 제거하기
구문이 짧은 Robert H 답변 과 매우 유사
붙여 넣기 및 스크립트 아래에서 실행
dir. \ -bin, obj, resharper * -recurse 포함 | foreach ($ ) {rd $ _. fullname –Recurse –Force}
매우 빠르고 쉬운 방법은 rimraf
npm 유틸리티 를 사용하는 것입니다 .
> npm i rimraf -g
그런 다음 프로젝트 루트의 명령은 매우 간단합니다 (스크립트 파일에 저장할 수 있음).
projectRoot> rimraf **/bin **/obj
원하는 효과를 최적화하기 위해 BeforeRebuild
문서에 지정된 프로젝트 이벤트 대상 (사용할 수있는 대상을 이전 명령으로 실행)을 활용할 수 있습니다. https://docs.microsoft.com/en-us/visualstudio/ msbuild / 방법 확장-시각-스튜디오-빌드-프로세스? view = vs-2017
나는 rimraf 유틸리티가 크로스 플랫폼이고 정말 빠르기 때문에 좋아합니다. 그러나 RemoveDir
대상 이벤트 옵션을 사용하기로 결정한 경우 .csproj 에서 명령을 사용할 수도 있습니다 . 이 RemoveDir
접근법은 @Shaman의 또 다른 답변에서 잘 설명되어 있습니다 : https : //.com/a/22306653/1534753
여기에 답이 있습니다 비슷한 질문에 대한 대답입니다. 간단하고 쉽습니다.
다른 사람들이 이미 응답 했으므로 Clean은 빌드에서 생성 된 모든 아티팩트를 제거합니다. 그러나 그것은 다른 모든 것 뒤에 남을 것입니다.
MSBuild 프로젝트에 일부 사용자 정의가 있으면 문제가 발생하여 삭제해야 할 것으로 남을 수 있습니다.
끝 부분 근처에 이것을 추가하여. * proj를 간단하게 변경 하여이 문제를 피할 수 있습니다.
<Target Name="SpicNSpan"
AfterTargets="Clean">
<RemoveDir Directories="$(OUTDIR)"/>
</Target>
현재 플랫폼 / 구성의 bin 폴더에있는 모든 것을 제거합니다.
이것은 모든 BIN 및 OBJ 폴더를 재귀 적으로 삭제하는 데 사용하는 배치 파일입니다.
@echo off
@echo Deleting all BIN and OBJ folders...
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
@echo BIN and OBJ folders successfully deleted :) Close the window.
pause > nul
빌드 서버에서 nant 스크립트를 통해 bin 및 obj 디렉토리를 명시 적으로 삭제합니다.
각 프로젝트 빌드 스크립트는 출력 / 임시 디렉토리를 담당합니다. 그런 식으로 잘 작동합니다. 따라서 프로젝트를 변경하고 새 프로젝트를 추가하면 스크립트가 작동하는 스크립트를 기반으로하며 삭제 단계를 확인하고 처리합니다.
논리 개발 머신에서 수행하는 경우 다른 사람들이 언급했듯이 Visual Studio를 통해 정리해야합니다.
나는 실제로 소스 트리를 어지럽히는 obj 파일을 싫어합니다. 나는 보통 소스 트리 외부에서 obj 파일을 출력하도록 프로젝트를 설정합니다. C # 프로젝트의 경우 일반적으로 사용합니다
<IntermediateOutputPath>..\..\obj\$(AssemblyName)\$(Configuration)\</IntermediateOutputPath>
C ++ 프로젝트
IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)"
Visual Studio 솔루션을 찾아서 Clean 명령을 실행하는 명령 줄 도구입니다. 이를 통해 하드 드라이브에있는 모든 오래된 프로젝트의 / bin / * 디렉토리를 정리할 수 있습니다
실제로 PS 제안을 조금 더 받아 프로젝트 디렉토리에 다음과 같이 vbs 파일을 만들 수 있습니다.
Option Explicit
Dim oShell, appCmd
Set oShell = CreateObject("WScript.Shell")
appCmd = "powershell -noexit Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse -WhatIf }"
oShell.Run appCmd, 4, false
안전을 위해 -WhatIf 매개 변수를 포함 시켰으므로 처음 실행 한 목록에 만족하면 제거하십시오.
Robert H 를 약간 수정하여 오류를 건너 뛰고 삭제 파일을 인쇄합니다. 또한 .vs
, _resharper
및 package
폴더를 usally로 지 웁니다 .
Get-ChildItem -include bin,obj,packages,'_ReSharper.Caches','.vs' -Force -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse -ErrorAction SilentlyContinue -Verbose}
git
무시할 파일과 디렉토리를 포함하여 모든 변경 사항을 지우는 명령도 주목해야합니다 .
git clean -dfx
프로젝트 파일이 많은 큰 .SLN 파일이 있습니다. 모든 비 소스 제어 파일이있는 "ViewLocal"디렉토리를 갖는 정책을 시작했습니다. 그 디렉토리 안에는 'Inter'와 'Out'디렉토리가 있습니다. 중간 파일 및 출력 파일 각각에 대해.
이것은 분명히 'viewlocal'디렉토리로 이동하고 간단한 삭제를 수행하여 모든 것을 제거하기 쉽습니다.
스크립트를 사용하여이 문제를 해결하는 방법을 알아 내기 전에 시간을 투자하기 전에 비슷한 것을 설정하는 것이 좋습니다.
그래도 거짓말을하지는 않겠지 만, 대규모 조직에서 그러한 설정을 유지하는 것은 흥미 롭습니다. 특히 파일을 처리하고 비 소스 제어 소스 파일을 생성하는 QT와 같은 기술을 사용하는 경우. 그러나 그것은 전체 다른 이야기입니다!
배치 솔루션. 다음 명령을 사용하고 있습니다.
FOR /D /R %%G in (obj,bin) DO @IF EXIST %%G IF %%~aG geq d RMDIR /S /Q "%%G"
DIR /S /AD /B xxx
1 DIR /S /AD /B obj
을 사용하지 않는 이유 는 빈 목록을 반환합니다 (적어도 내 Windows10에서는)
2. 예상하지 못한 결과가 포함됩니다 (tobj 폴더)
DIR /S /AD /B *obj
@IF EXIST %%G IF %%~aG geq d
기존 경로를 확인하는 데 사용되며 경로는 파일이 아닌 폴더입니다.
솔루션 / 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "청소"버튼을 클릭 할 수 있다고 생각합니다.
내가 기억하는 한 그렇게 작동했습니다. VS.NET이 없어서 테스트 할 수 없습니다.