I want to delete all bin and obj folders to force all projects to rebuild everything

后端 未结 26 1959
迷失自我
迷失自我 2020-11-28 16:53

I work with multiple projects, and I want to recursively delete all folders with the name \'bin\' or \'obj\' that way I am sure that all projects will rebuild everything (so

相关标签:
26条回答
  • 2020-11-28 17:58

    This depends on the shell you prefer to use.

    If you are using the cmd shell on Windows then the following should work:

    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"
    

    If you are using a bash or zsh type shell (such as git bash or babun on Windows or most Linux / OS X shells) then this is a much nicer, more succinct way to do what you want:

    find . -iname "bin" | xargs rm -rf
    find . -iname "obj" | xargs rm -rf
    

    and this can be reduced to one line with an OR:

    find . -iname "bin" -o -iname "obj" | xargs rm -rf
    

    Note that if your directories of filenames contain spaces or quotes, find will send those entries as-is, which xargs may split into multiple entries. If your shell supports them, -print0 and -0 will work around this short-coming, so the above examples become:

    find . -iname "bin" -print0 | xargs -0 rm -rf
    find . -iname "obj" -print0 | xargs -0 rm -rf
    

    and:

    find . -iname "bin" -o -iname "obj" -print0 | xargs -0 rm -rf
    

    If you are using Powershell then you can use this:

    Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
    

    as seen in Robert H's answer below - just make sure you give him credit for the powershell answer rather than me if you choose to up-vote anything :)

    It would of course be wise to run whatever command you choose somewhere safe first to test it!

    0 讨论(0)
  • 2020-11-28 18:00

    I actually hate obj files littering the source trees. I usually setup projects so that they output obj files outside source tree. For C# projects I usually use

     <IntermediateOutputPath>..\..\obj\$(AssemblyName)\$(Configuration)\</IntermediateOutputPath>
    

    For C++ projects

     IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)"
    
    0 讨论(0)
提交回复
热议问题