为什么我不能从命令行删除.svn目录中的条目文件?

时间:2010-08-20 23:46:50

标签: svn macos

首先,这是在Mac OS X上完成的,版本10.6.4

我复制了一个文件树,其中包含一些已经从subversion中检出的java代码。我想删除该树中的所有.svn文件。所以我使用了以下命令:

find . -name .svn -exec rm -fr .svn {} \;

我收到了这样的消息:

rm: ./repository/entity/.svn: Directory not empty

我查看了目录,它看起来像这样:

$ ls -ld .
-r--r--r--  1 tgia  staff  1250 Aug 13 10:48 entries

该文件的父目录如下所示:

$ ls -ld .
drwxr-xr-x  4 tgia  staff  136 Aug 20 16:55 .

好的,更改文件的权限:

$ chmod u+w entries 
chmod: Unable to change file mode on entries: Operation not permitted 

我不明白,这些文件怎么了?我没有尝试使用chmod似乎改变了文件权限。文件所有权是正确的。我很痛苦。 WTF?即使root也无法改变它们。

$ sudo chmod u+w entries
Password:
chmod: Unable to change file mode on entries: Operation not permitted

幸运的是root可以删除它们......

4 个答案:

答案 0 :(得分:6)

除了通常的rwx标志外,OSX还有一个特殊的UCHG标志。这可能是你遇到的。

在用户界面中,您可以在“获取信息”窗口中设置或取消设置它。单击“锁定”复选框。

在命令行中使用chflags uchg filename进行设置。或chflags nouchg filename取消设置。

在Windows上设置了只读标志的文件将在通过smb进行交换时显示设置的uchg标志。这就是我遇到它的方式。

答案 1 :(得分:2)

我不确定你的命令行是否完全正确。尝试:

find . -name .svn | xargs rm -rf

我认为您的命令行会尝试执行以下命令:

rm -fr .svn subdir1/.svn
rm -fr .svn subdir2/.svn

也就是说,你在这里有一个额外的.svn

答案 2 :(得分:2)

find . -name .svn -exec rm -fr .svn {} \;

应该是

find . -name .svn -exec rm -fr {} \;

答案 3 :(得分:1)

我不得不取消uappnd标志以及uchg标志,即:

find .svn -type f |xargs sudo chflags nouappnd,nouchg