我的目录树相当复杂。有许多子目录,这些子目录中除了其他文件和目录外还有“.svn”目录。
现在,在Linux下我想删除所有文件和目录除了.svn 目录。
我发现了许多关于相反行为的解决方案 - 删除树中的所有 .svn 目录。有人能告诉我删除除 .svn 之外的所有内容的正确答案吗?
答案1
我通常使用相对简单的find
选项-exec
,因为我总是忘记 -delete 命令。我还限制为仅限文件。主要是因为我使用了很多变体find {someswitches} -exec {somecommand}
- 所以我记得它!
find . -type f -not path '*.svn*' -exec rm {} \;
答案2
未经测试: find . -not -path '*.svn*'
...如果这些都是您想要破坏的文件,请使用该-delete
选项再次运行它。
答案3
试试这个rm -rf -- $(ls -la |grep -v .svn)
。它将删除.svn
目录之外的所有内容(包括隐藏文件)。
编辑:上述解决方案适用于一个目录,而不是树,find . ! -name .svn -exec rm {} \;
将删除所有文件而不是目录。这是一种安全的方法,因为如果您强制rm
打开目录,则可以删除.svn
其中包含目录的目录。