1

含まれているすべてのフォルダーで読み取り専用のアクセス許可を持つアプリケーション (MyApp.app) を削除する必要があります。削除する前に、含まれているすべてのファイル/ディレクトリのアクセス許可を 0644 に変更する必要があります。これを再帰的に行うにはどうすればよいですか?

私はもう試した

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

しかし、FileUtils.chmod再帰的には機能しません。Unix コマンドを使用できません。Ruby でなければなりません。

編集: 現在のコンテキストでは Unix コマンドを使用できません。OK、これは 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}}

再度、感謝します。

4

1 に答える 1

6

FileUtils.chmod_R で実行する必要があります

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

- 編集 -

seth@oxygen ~ $ mkdir -p foo/bar/seth

seth@oxygen ~ $ ls -ld foo
drwxr-xr-x  3 seth  staff  102 Oct 15 19:24 foo

seth@oxygen ~ $ ls -ld foo/bar
drwxr-xr-x  3 seth  staff  102 Oct 15 19:24 foo/bar

seth@oxygen ~ $ ls -ld foo/bar/seth
drwxr-xr-x  2 seth  staff  68 Oct 15 19:24 foo/bar/seth

seth@oxygen ~ $ cat test.rb
require 'fileutils'
begin; FileUtils.chmod_R(0777, 'foo'); rescue; end

seth@oxygen ~ $ ruby test.rb

seth@oxygen ~ $ ls -ld foo
drwxrwxrwx  3 seth  staff  102 Oct 15 19:24 foo

seth@oxygen ~ $ ls -ld foo/bar
drwxrwxrwx  3 seth  staff  102 Oct 15 19:24 foo/bar

seth@oxygen ~ $ ls -ld foo/bar/seth
drwxrwxrwx  2 seth  staff  68 Oct 15 19:24 foo/bar/seth

簡単なテストが機能するようです。

于 2009-10-14T19:05:07.803 に答える