.svn 폴더가 포함된 경우에도 빈 폴더를 모두 삭제하세요.

.svn 폴더가 포함된 경우에도 빈 폴더를 모두 삭제하세요.

디렉터리 내의 모든 빈 폴더를 삭제하려고 합니다. 그러나 find . -type f -empty모든 폴더에는 숨겨진 폴더가 포함되어 있으므로 아무것도 찾지 못합니다 .svn.

이 문제를 어떻게 해결할 수 있나요?

답변1

가능하다면 먼저 모든 .svn폴더를 제거할 수 있습니다. 단점: 누군가 SVN을 사용하는 경우 버전 제어 정보가 손실됩니다. 누군가 SVN을 사용하는 경우 해당 폴더만 제거하는 것은 좋은 생각이 아닙니다. 또는 실제로 SVN이 폴더와 파일을 추적하므로 SVN에서도 해당 폴더를 제거해야 합니다.

이것이 가능하지 않다면 스크립팅 경로를 사용하겠습니다.

for folder in $(find . -type d); do
 if [ "`ls $folder | wc -l`" -eq 0 ]; then
  echo "I am going to delete $folder"
 fi
done

놀라운 일이 있을 수 있으므로 먼저 테스트 실행을 시도해 보세요. 그러면 rm -r그 대신 변경할 수 있습니다 echo.

그러나 이렇게 하면 도트 파일만 있는 모든 폴더가 제거됩니다(예를 들어 a/.this_is_super_important다른 파일이나 폴더가 없는 경우 삭제됩니다).

답변2

사소한 수정(디렉토리를 인쇄하고 xargs나중에 파이프하기만 하면 됩니다):

for folder in $(find -type d ! -path *.svn*); do
  if [ "`find $folder ! -path *.svn* ! -path $folder | wc -l`" -eq 0 ]; then
    echo $folder
  fi
done

이것을 어딘가에 넣은 다음 먼저 실행 $PATH하십시오 svn-empties.

svn-empties

찾은 디렉터리를 나열하고(필요한 경우 목록 수정) 다음으로 파이프합니다 xargs.

svn-empties | xargs svn rm

이 스크립트는 사용하는 동안 나에게 매우 유용해졌습니다 git-svn(감사합니다!). 빈 디렉토리를 추적하지 않기 때문에 gitSubversion 저장소에 빈 디렉토리가 많이 생길 수 있습니다. svn co저장소의 별도 복사본을 만들고 svn-empties | xargs svn rm주기적으로 실행합니다. 처음에 Subversion을 사용하는 것은 내 결정이 아니었습니다.)

답변3

방금 우연히 이것을 발견하고 이 스크립트를 사용했지만 빈 디렉토리를 .svn이 있는 디렉토리만 적절하게 고려하고 숨겨진 파일이나 일반 파일은 고려하지 않도록 수정했습니다.

또한 저는 svn rm을 사용하고 있으므로 이는 저장소에 대해 작동한다고 가정하고 디렉토리에서 다른 작업을 수행하도록 스크립트를 조정할 수 있습니다.

for folder in $(find -type d ! -path *.svn*); do
  if [ "`find $folder ! -path *.svn* ! -path $folder | wc -l`" -eq 0 ]; then
    svn rm $folder
  fi
done

답변4

  1. 다음 문제를 해결했습니다. 경로의 공백
  2. 다음과 같이 PATH 매개변수를 사용하여 스크립트를 호출할 수 있습니다.

svn-empties YOU_WANT_TO_SEARCH_PATH

C_IFS=$IFS

IFS=$'\n'

for folder in $(find "$1" -depth -type d ! -path *.svn*|sort -r); do
  counts=$(find "$folder" -type f ! -path *.svn* ! -path $folder | wc -l)

  if [ $counts -eq 0 ]; then
    echo $folder
  fi

done

IFS=$C_IFS

관련 정보