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}}
再次感谢。
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
快速测试似乎工作。
它不会递归出于某种原因。 – 2009-10-14 20:43:45
我一定会在我身边做同样的测试。会让你知道。 谢谢 – 2009-10-16 04:53:32
@谢谢,非常感谢,它的工作!出于某种原因,当我尝试它时,它没有,但可能我没有正确使用它。 – 2009-10-16 08:20:19
如果你只是删除它,它有什么用途来改变权限? – 2009-10-14 19:04:04
当你说你*不能使用Unix命令*时,我感到困惑。你在OSX上。 Unix命令在那里工作得非常好。这是功课吗? (除此之外,Jeff是正确的:没有理由更改您要删除的内容的权限。) – Telemachus 2009-10-14 19:09:50
如果MyApp.app对所有包含的文件夹拥有只读权限,我无法将其删除。请参阅编辑以获得更好的解释。不,这不是一项功课... – 2009-10-14 21:00:04