我尝试删除目录中的所有空文件夹。但是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