
我正在嘗試刪除目錄中的所有空資料夾。但是,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
- 解決了以下問題:路徑中存在空格
- 可以使用 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