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

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

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

chown username:groupname .

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

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

答え1

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

また、 を実行することもできます。chown -R username:groupname .これにより、現在のディレクトリの権限が変更され、その後、そのディレクトリ内とすべてのサブフォルダーを再帰的に調べて権限が変更されます。

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

答え2

あなたが欲しいのはこれだと思います:

chown username:groupname *

サブディレクトリも再帰的に変更したい場合は、-R(-rは非推奨) スイッチが必要になります。

chown -R username:groupname *

答え3

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

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

例:

% mkmeowner .

% mkmeowner dirpath1 dirpath2
  • 次のスクリプトがmkmeowneroneパスに含まれている必要があります。

所有者:

#!/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

答え4

現在のディレクトリ内のすべてのファイルを変更する別の方法は、username:groupnameサブシェルを使用することです。

chown username:groupname $(find . -name "[a-zA-Z0-9]*")

bash 組み込みコマンドは、サブシェル内のfind正規表現とともに使用され、より複雑な管理タスクの基礎を形成できます。[a-zA-Z0-9]*$()

関連情報