删除所有空文件夹,即使其中包含 .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

相关内容