現在のディレクトリ内のすべてのファイルをchown / chmodする方法は?


56

現在のディレクトリ内のいくつかのファイル(およびディレクトリ)の所有権とアクセス権を変更しようとしています。私はこれを試しました:

chown username:groupname .

...現在のディレクトリ内のすべてのファイルに影響するものの、代わりに私がいるディレクトリにのみ影響することを期待しています(これは私がやりたいことの反対です)。私がいる現在のディレクトリに影響を与えずに、すべてのファイルで変更したい。

現在のディレクトリ内のすべてのファイルをchownおよびchmodするにはどうすればよいですか?


man chownそして、man chmod簡単にあなたの質問に答えます。

2
@Shi公正な質問だと思います。そのマニュアルページを読んでも助けにはなりません。グロビングはの一部ではありませんchmod。シェルに組み込まれています。また、グロビングに関するドキュメントを読むことはあなたの命を奪います(私は多くの時間を費やしてzshのすべての機能を理解しました)。
djf

1
@djf:chown -R user:group .

回答:


96

を使用しchown username:groupname *、シェル*に現在のディレクトリの内容まで展開させます。これにより、現在のディレクトリ内のすべてのファイル/フォルダの権限が変更されますが、フォルダの内容は変更されません。

またchown -R username:groupname .、を実行して、現在のディレクトリのアクセス許可を変更し、そのディレクトリおよびすべてのサブフォルダー内で再帰的にアクセスしてアクセス許可を変更することもできます。

chown -R username:groupname *現在のディレクトリ自体をそのままにして、すべてのファイルとフォルダのアクセス許可を再帰的に変更します。このスタイルと最初のスタイルは、私が最も頻繁に使用しているものです。


2
しかし、アンドリューは警戒してください、彼は友人であるか、疲れているか、準備ができていない敵であることができます。
ダースアンドロイド

5
また、期間の危険に注意してください。キーボードのオールマイト「/」のすぐ隣に配置されているため。単純なタイプミスは簡単にchown -R username:groupname .変換できますchown -R username:groupname /。2秒のタスクを2日間の悪夢にする。
テイノン

@Tomだから、おそらく-vすべての再帰コマンドで使用を開始する必要がありますが、あまりにも怠
-Kolob Canyon

キーボードのずれを避けるために、具体的かつディレクトリに名前を付けますが、最良かつ最も簡潔なアンサーとして支持されました:chown -R username:groupname directoryname
Dave Everitt

9

これが欲しいと思う:

chown username:groupname *

サブディレクトリも再帰的に変更する場合は、-R-r廃止予定の)スイッチが必要です。

chown -R username:groupname *


0

chownあなたがスーパーユーザーなら素晴らしいです。他の誰かがmake私のディレクトリで実行していた問題があり、現在は変更できないファイルをいくつか所有しています。ここにファイルとディレクトリを処理する回避策がありますが、.mkmeowner削除できない場合はディレクトリにサフィックスが残ります。

  • 次のスクリプトは、渡されたファイルとディレクトリの所有権を現在のユーザーが所有するように変更し、現在のユーザーが所有していないすべてのディレクトリまたはファイルの新しいコピーを作成することにより、アクセス許可の問題を回避しようとし、削除する(または削除しようとする)元のファイル、および適切な名前の変更。
  • 意図は「所有者にする」の略語にすることです。アンダースコアは入力しにくいため、使用しません。

例:

% mkmeowner .

% mkmeowner dirpath1 dirpath2
  • mkmeowneroneパスに次のスクリプトが必要です。

mkmeowner:

#!/bin/bash
[ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] && cat << END && exit 0
Usage: $0 dirorfile [direorfile2 ...]:
    change ownership of directories or files to current user.
    Current user must have permissions to read those and write to owner directory.
END
mkmeownerone=`which mkmeownerone`
for d in $*; do
    find "$d" -not -user `whoami` -exec $mkmeownerone {} \;
done

mkmeownerone:

#!/bin/bash
# change ownership of one file or directory
f="$1"
expr match "${f}" '.*\.mkmeowner$' > /dev/null && exit 1 # already tried to do this one
if mv -f "$f" "${f}.mkmeowner"; then
    cp -pr "${f}.mkmeowner" "$f" && rm -rf "${f}.mkmeowner"
    exit 0
fi
exit 1

1
(1)何らかの説明を含む回答を希望します。あなたのスクリプトを読んで、それらが何をするのかを見たとき、私は驚いた。(2)ユーザーmkmeowneroneが検索PATHに入力する必要があることを忘れていました。  mkmeownerそうしないと爆発します。(3)シェルコマンドとスクリプトで引用符を使用する方法(つまり、いつ、どこで)を学習してください。言うこと${f}は有用な代替手段ではありません。これを参照してください。…(続き)
スコット

(続き)…(4)スクリプトをディレクトリで実行すると、ディレクトリ内のすべてのファイルが2回コピーされる可能性があります。(5)  exprは時代遅れです。シェルで単純な文字列照合を行う方が効率的です。bashは正規表現のマッチングもサポートしています。そのため、find. (6)でファイル名のテストを実行できます。expr matchコマンド${f}mkmeowner、で終わるかどうかではなく、で終わるかどうかをテストし.mkmeownerます。したがって、スクリプトはそれ自体では機能しません。…(続き)
スコット

(続き)…おそらく、これは良いことです。実行中にスクリプトを移動したり削除したりすることは望ましくありません。(必ずしも問題を引き起こすわけではありませんが、面倒な場合があります。)しかし、そのような特別なケースを理解(および文書化)する必要があります。(7)マルチワード文字列でアンダースコアを使用したい場合があります。  dirorfile読みやすく、理解しにくい(と比較してくださいdir_or_file)、私が見たときmkmeowner、私の最初の考えは猫(mk +  meow +  ner)でした。
スコット

スコットに感謝します。1.説明はあると思いましたが、もっとはっきりさせてください。2.良い点。元のスクリプトでそれをキャプチャしましたが、参照を削除しました。3.私は30年間シェルスクリプトを書いてきましたが、確かに、もっと学びたいと思います。4.はい。ディレクトリを所有していない場合は削除できないため、意図的に。それに言及することができます。5.ええ、私は昔ながらですが、exprはまだかなりうまく機能します。7.アンダースコアはルールではないので、IIは芸術的なライセンスを取得すると思います。鳴き声を出すスクリプトが必要です!
sbcondor

$ {f}に問題はないと思いますか?必要以上に少し長くなっています。変数を使用して$ {f} .mkmeownerのような長い文字列を作成したい場合があるため、よく使用する形式です。$ f.heckが$ {f} + heckか$ { f.heck}
sbcondor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.