刪除所有空資料夾,即使其中包含 .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(謝謝!)。由於git不追蹤空目錄,我最終可能會在 Subversion 儲存庫中得到許多空目錄。我有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

相關內容