web-dev-qa-db-ja.com

Macでシェルコマンドを使用してファイルとフォルダーのアクセス許可を再帰的に変更する

Linuxでは、次のコマンドを使用して、ファイルとフォルダーのアクセス許可モードを再帰的に変更できます。

find "/ Users/Test/Desktop/PATH" -exec * chmod 777 {} \;

次のエラーが繰り返し発生するのと同じように、Macでも同じことができます。

find:TEST_FILE:そのようなファイルまたはディレクトリはありません

27
pytho

問題は、*がシェルによって解釈され、現在の作業ディレクトリにあるTEST_FILEという名前のファイルに展開されるため、findに存在しないTEST_FILEという名前のコマンドを実行するように指示していることです。 *で何を達成しようとしているのかわかりません。削除するだけです。

さらに、findが各ファイルの新しいプロセスをフォークしないように、-exec program '{}' \+の代わりにイディオム-exec program '{}' \;を使用する必要があります。 ;では、ファイルごとに新しいプロセスがフォークされますが、+では、1つのプロセスのみをフォークし、すべてのファイルを単一のコマンドラインで渡します。これは、chmodのような単純なプログラムの方がはるかに効率的です。

最後に、chmod-Rフラグを使用して独自に再帰的な変更を行うことができるため、特定のファイルを検索する必要がない限り、次のようにします。

chmod -R 777 /Users/Test/Desktop/PATH
41
Adam Rosenfield

-R(再帰)フラグを使用するだけです。

chmod -R 777 /Users/Test/Desktop/PATH
31
Andrew Vit

CHMOD yesを使用して:

再帰ファイルの場合:

chmod -R 777 foldername or pathname

非再帰的:

chmod 777 foldername or pathname
10
Einlanzer

これをテストするMac OSxマシンはありませんが、Linuxのbashでは、次のようなものを使用してディレクトリのみをchmodします。

find . -type d -exec chmod 755 {} \+

しかし、これも同じことをします:

chmod 755 `find . -type d`

これもそうです:

chmod 755 $(find . -type d)

最後の2つは、異なる形式のサブコマンドを使用しています。 1つ目はバックティック(古いおよび減価償却済み)を使用し、もう1つは$()サブコマンド構文を使用します。

だから私はあなたの場合、以下があなたが望むことをするだろうと思います。

chmod 777 $(find "/Users/Test/Desktop/PATH")
5
frederickjh