web-dev-qa-db-ja.com

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

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

chown username:groupname .

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

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

54
Andrew

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

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

chown -R username:groupname *は、現在のディレクトリ自体をそのままにして、すべてのファイルとフォルダに対するパーミッションを再帰的に変更します。このスタイルと最初のスタイルは、私が一番よく使うものです。

92
Darth Android

私はあなたがこれを望んでいると思います:

chown username:groupname *

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

chown -R username:groupname *

8
djf

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
0
sbcondor