Mac OS X中的ruby递归chmod?

问题描述:

我需要删除一个应用程序(MyApp.app),该应用程序在其所有包含的文件夹中都具有只读权限。在删除它之前,我应该将所有包含的文件/目录的权限更改为0644.如何递归执行此操作?Mac OS X中的ruby递归chmod?

我已经试过

begin; FileUtils.chmod(0644, '#{config.appPath}'); rescue; end 
begin; FileUtils.rm_r('#{config.appPath}'); rescue; end 

FileUtils.chmod功能不能递归调用。我不能使用Unix命令 - 它必须是Ruby。

编辑:我不能在当前的上下文中使用Unix命令。好的,这是一个RubyCocoa应用程序,你看到的源代码是ruby脚本的一部分,它应该卸载应用程序(请不要对此发表评论,因为这是我的客户的代码)。卸载包括删除应用程序的所有痕迹,终止进程并最终删除应用程序本身。通常它可以工作,但不适用于由于某种原因MyApp.app文件夹获得只读权限的情况。所以我想在文件夹上递归地运行一个chmod,然后将它移除,但是由于某些原因,它在Ruby中并不是直截了当的。 这就是为什么我要求帮助。有很多关于如何从命令行执行它的例子,但是你如何从代码中执行它?

这里从代码多一些,只是为了展示如何是它实现的:

code =<<FOO 
require 'fileutils' 
# kill the app before deleting files in case it writes files on exit 
%x{/bin/kill -9 #{NSProcessInfo.processInfo.processIdentifier}} 
begin; FileUtils.chmod(0644, '#{TBConfig.appPath}'); rescue; end 
begin; FileUtils.rm_r('#{TBConfig.appPath}'); rescue; end 
FOO 
    ff = Tempfile.new('timebridge') 
    ff.write(code) 
    ff.close 
    %x{/usr/bin/ruby #{ff.path}} 

再次感谢。

+2

如果你只是删除它,它有什么用途来改变权限? – 2009-10-14 19:04:04

+0

当你说你*不能使用Unix命令*时,我感到困惑。你在OSX上。 Unix命令在那里工作得非常好。这是功课吗? (除此之外,Jeff是正确的:没有理由更改您要删除的内容的权限。) – Telemachus 2009-10-14 19:09:50

+0

如果MyApp.app对所有包含的文件夹拥有只读权限,我无法将其删除。请参阅编辑以获得更好的解释。不,这不是一项功课... – 2009-10-14 21:00:04

FileUtils.chmod_R应该这样做

http://www.ruby-doc.org/core/classes/FileUtils.html#M004351

- 编辑 -

[email protected] ~ $ mkdir -p foo/bar/seth 

[email protected] ~ $ ls -ld foo 
drwxr-xr-x 3 seth staff 102 Oct 15 19:24 foo 

[email protected] ~ $ ls -ld foo/bar 
drwxr-xr-x 3 seth staff 102 Oct 15 19:24 foo/bar 

[email protected] ~ $ ls -ld foo/bar/seth 
drwxr-xr-x 2 seth staff 68 Oct 15 19:24 foo/bar/seth 

[email protected] ~ $ cat test.rb 
require 'fileutils' 
begin; FileUtils.chmod_R(0777, 'foo'); rescue; end 

[email protected] ~ $ ruby test.rb 

[email protected] ~ $ ls -ld foo 
drwxrwxrwx 3 seth staff 102 Oct 15 19:24 foo 

[email protected] ~ $ ls -ld foo/bar 
drwxrwxrwx 3 seth staff 102 Oct 15 19:24 foo/bar 

[email protected] ~ $ ls -ld foo/bar/seth 
drwxrwxrwx 2 seth staff 68 Oct 15 19:24 foo/bar/seth 

快速测试似乎工作。

+0

它不会递归出于某种原因。 – 2009-10-14 20:43:45

+0

我一定会在我身边做同样的测试。会让你知道。 谢谢 – 2009-10-16 04:53:32

+0

@谢谢,非常感谢,它的工作!出于某种原因,当我尝试它时,它没有,但可能我没有正确使用它。 – 2009-10-16 08:20:19