アクセス権を一括変更したいのですが

何処に書き込んで良いものかわからず、こちらに失礼します。


今、ファイルにロックが掛った上に、アクセス権限が「読み出しのみ」になったファイルが大量にあります。
そこで、AutomatorとApplescriptを使って、ロックをはずして、アクセス権限を「読み/書き」に変更したいと思っています。
色々調べて、ロックを外すところまでは出来たのですが、アクセス権限を変更するスクリプトが分りませんでした。
ターミナルから変更するためのコマンドはあるようですが・・・
アクセス権限に関しては、情報パネルからフォルダに含まれるファイルのアクセス権をまとめて変更できるようなので何とかなるのですが、どうせなら自動化出来ないものかと思い、書き込ませ頂きました。


何方かご教示いただけますでしょうか。
よろしくお願いします

投稿日 2009/10/31 03:55

返信
返信: 12

2009/10/31 06:25 triten への返信

アクセス権を変更したいファイルがどのよに散らばっているかで、やり方が変わると思います。

例えば、アクセス権を変更したいファイルの変更リストが、作成出来る状況であれば、シェルスクリプトでいけると思います。(私自身は、出来ませんが、スクリプトで出来ることは判ります)


アクセス権を変更したいファイルが単純に複数のフォルダに散らばっているだけなのでしたら、その数によってはコマンドを単純に実行していけばよいのではないでしょうか。


sudo chmod u+rwx ・・・・・

を複数ファイルに実行したいと言う事なのでしょう。

2009/11/01 08:34 ni_ki への返信

ni_kiさん有り難う御座います。


状況としてはフォルダの中にいくつかのフォルダがあり、その中がまたいくつかのフォルダに別れているような状態で、一番上のフォルダは簡単に指定出来ますので、◯◯フォルダ以下に含まれるファイルのアクセス権を全て変更ですみます。


確かにシェルスクリプトで出来るようですが、せっかくAutomatorでファイルのロックを外すスクリプトを作ったので、ついでにアクセス権も書き直せないものかと・・・

アップルスクリプトからターミナルを呼び出してシェルスクリプトを実行する方法もあるようなので、もう少し調べてみようと思います。

2009/11/01 10:06 triten への返信

ご自身でお作りになったDataならFolderの奥まで同じ設定でも問題ないと思いますが、Appが作ったDataだと動かなくなる可能性があります。何故ならLeopardからは通常のアクセス権の外に拡張属性とACLで細かく設定されている可能性があるからです。


Terminalでアクセス権を弄るのは簡単ですが元のアクセス権を知らないと問題が起きた時に対処出来ません。またAppleScriptで行うとするとTerminal Commandを実行する必要があるのとSystem EventにPasswordを渡したりPathなどで壁にぶつかります。AutomatorやAppleScritpでアクセス権を弄るのは限界を知った上てお使いになる必要があると思います。


HOME内のアクセス権がどのようになっているか一度ご覧になられると良いと思います。

2009/11/02 01:42 triten への返信

私が導入しているものを紹介します。

Finderのコンテクストメニューからファイルのオーナーを自分に設定できます。

ロックを外すアクションも同時に設定すれば一発で出来ると思います。

Automatorで「サービス」を新規作成して

「ファイルまたはフォルダ」の検索対象を「Finder」として

1.選択されたFinder項目を取得


2.Applescriptを実行

でその中身を

on run {input, parameters}

set dname to item 1 of input

try

set com to "sudo chown -R user名:user名 " & (quoted form of POSIX path of dname)

set s to do shell script com password "パスワード" with administrator privileges

set com to "sudo chmod -R 744 " & (quoted form of POSIX path of dname)

set s to do shell script com password "パスワード" with administrator privileges


on error errorMessage

display dialog errorMessage

end try



return input

end run


色のところは管理者ユーザー名(英字)に

色のところはユーザーのパスワードに

書き換えれば、動作するはずです


ちょっと自信がないのは"sudo chown -R user名: user名 " のところです。

自分で作った書類はグループも自分のユーザ名と同じになっているようなので大丈夫だとは思うのですが。

詳しい方、フォローをお願いします。

2009/11/02 02:06 こういち への返信

set com to "sudo chown -R user名:user名 " & (quoted form of POSIX path of dname)


Mac OS X 10.6なら、"sudo chown -R user名:staff" の方がいいかもしれません。


set com to "sudo chmod -R 744 " & (quoted form of POSIX path of dname)


これを実行するとアクセス権が "-rwxr--r--" となり、フォルダの場合所有者以外からはフォルダとして機能しなくなるので場合によっては不都合が出るかもしれません。

"sudo chmod -R u+rw,go+r-w " の方がいいかもしれません。

2009/11/02 04:47 こういち への返信

ぴっぴさん、こういちさん、HALさん、皆さんアドバイス有難うございます。
わざわざコードまで書き込んで頂いて、本当に感謝です。


ですが、ちょっと今の私の限界を越えているような気がします。
このまま意味もわからず、コピペで魔法の呪文を打ち込むのは危険だろうと・・・
情報パネルからアクセス権を変更して「内包する項目に適用する」ボタンを押すだけなので、作業手順を記録して繰り返すという意味では、アップルスクリプトで簡単に出来るんじゃないかと思ってしまったのです。
ただ、ロックが外せるようになっただけでも、かなり手間が省けるのも事実で、Terminal Commandも含めて少し時間をかけて勉強してみようかなと思っております。
set locked of theFile to false ですら、英語に近いので分ったような気になっていますが、正確に理解できているわけではないのです。


また何か困った事があったら、ご質問させていただく事があるかもしれません。
その節は何卒、宜しくお願い致します。

2009/11/02 16:54 triten への返信

前回は雑なスクリプトを出してしまいました。


ちょっと調べてみましたが、「内包する項目に適用」に相当するスクリプト命令はみつかりませんでした。

調べたついでに、所有者が自分のファイル限定ですが、読み書き権限を与えるものをAppleScriptのみで作ってみました。

前回のはコンテクストメニューで一件しか実行できませんが、このスクリプトならいくつでも選択できます。

on run {input, parameters}

repeat with obj in input

display dialogobj as text

tell application "Finder"

set locked of obj to false

set owner privileges of obj to read write

end tell

end repeat

return input

end run


赤字の部分の追加でロックも外せるようにしました。


2009/11/04 02:43 triten への返信

triten さんによる書き込み:


ですが、ちょっと今の私の限界を越えているような気がします。

このまま意味もわからず、コピペで魔法の呪文を打ち込むのは危険だろうと・・・

こういち さんが書き込んで下さったスクリプトや、HAL さんが書き込んで下さったsudo chownなどのコマンドの事と思いますが、ちょこっと調べると「ああー、なるほど、こんな感じかな」くらいまでは、直ぐ分かるようになると思います。


もし、お時間が取れるようでしたら、調べてみると「世界が広く」なりますよ。私見ですが、簡単な書籍を購入して読む方が、理解が早いです。ネットで調べると、大量の情報で混乱することがある気がするので。(なお、私はスクリプトの話は、サッパリです^^;)

2009/11/08 08:04 ni_ki への返信

皆様、色々とアドバイス有り難う御座いました。

なかなか時間が取れず、せっかく書き込んで頂いたスクリプトのテストさえままならない状態で、申し訳ありませんでした。
とりあえず、Automatorと以下のスクリプトで動作確認まで出来ました。


---------------------------------------------
on run {input, parameters}
set res to button returned of (display dialog "ロックを解除して、アクセス権限を「読み/書き」に変更します" as Unicode text buttons {"キャンセル", "はい"} with icon 1)
repeat with obj in input
tell application "Finder"
if res is "はい" then
set locked of obj to false
set owner privileges of obj to read write
end if
end tell
end repeat
return input
end run
---------------------------------------------


どうせならラジオボタンなどでロックとアクセス権の状態を選択できるようにすれば、もう少し汎用的なアプリケーションになりそうなものですが、これで当面の問題は解決です!
本当に有難う御座いました。


でもこうなると欲も出てくるもので、もっと色々な作業をスクリプト化してみたくもなります。
複雑に階層化されたフォルダの中から取り出したファイルを、編集した後に元のフォルダへ戻すスクリプトとか・・・
まあ、勉強しながら少しずつやってみようと思います。

2009/11/08 15:25 triten への返信

Shell Scriptなら簡単に行えます。間違って実行すると起動出来なくなったり、Appが反応しなくなる恐れがあるので敢えて書きません。Terminalを弄るにはアクセス権の操作を覚える必要があります。通常のアクセス権は難しくはありませんがEAやACLは可成り手強いと思います。


drwxr-xr-x これがFile Modeで最初がDirectoryのd, Fileは-です。次の3つはOwner, 次がGroup, 次がOtherです。各々Read, Write eXcute, 8進数で覚えられると簡単です。この例だと755, 右中指4, read, 人差指2, write, 親指1, excuteで左が7, 次が5, 最後が5になります。


その次にあるのがOwner, Groupです。LeopardからHomeのOwnerとGroupはusername, staffになります。これを数字で表すと501, 20になります。

# 501はSetup Assistantで作ったuserです。アカウントを作ると502, 503と増えていきます。


Terminalで下記のTextを書いてRetrunを押すとHomeの全FileやFolderを表示します。

ls -laeR@ ~/


drwxr-xr-x+ 17 pippi staff 578 Nov 9 06:04 .

0: group:everyone deny delete

drwxr-xr-x 5 root admin 170 Nov 6 09:14 ..

-rw------- 1 pippi staff 3 Nov 6 09:14 .CFUserTextEncoding

-rw-r--r--@ 1 pippi staff 6148 Nov 7 05:09 .DS_Store

com.apple.FinderInfo 32

drwx------ 2 pippi staff 68 Nov 9 06:04 .Trash

-rw------- 1 pippi staff 0 Nov 9 02:14 .Xauthority

-rw------- 1 pippi staff 6531 Nov 9 07:45 .bash_history

drwxr-xr-x 3 pippi staff 102 Nov 6 09:34 .fontconfig

drwx------+ 5 pippi staff 170 Nov 9 02:47 Desktop

0: group:everyone deny delete゛A

drwx------+ 12 pippi staff 408 Nov 7 05:06 Documents

0: group:everyone deny delete

drwx------+ 5 pippi staff 170 Nov 9 02:02 Downloads

0: group:everyone deny delete

drwx------+ 38 pippi staff 1292 Nov 6 09:39 Library

0: group:everyone deny delete


File modeの最後の+がACLで、@がEAを表します。その下にあるのが設定です。

以上 簡単な説明です。詳しくはTerminalでman chmodやchownあるいはコマンドの本をご覧になって下さい。

2009/11/08 23:09 triten への返信

ただ単にアクセス権を全く同じものに一括変更するだけであれば、この方法はどうですか?


1)任意のフォルダを作る。

2)そのフォルダに一括変更したいアクセス権と同じアクセス権を設定する。

3)一括変更したいファイルをそのフォルダに入れる。

4)そのフォルダを一回クリックで選択し、メニューバーのファイル>情報を見る。

5)出てきたウィンドウ内一番下一番右の鍵をクリックして管理者パスワードを入れ、鍵を開ける。

6)鍵の左(+とーボタンの隣)の「歯車」をクリック。

7)「内包している項目に適用...」を押す。


これでこのフォルダと同じアクセス権がこのフォルダ内のファイルにすべて適用されるはずです。これでは駄目でしょうか?

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

アクセス権を一括変更したいのですが

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。