首先,这是在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可以删除它们......
答案 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