如何 chown/chmod 当前目录中的所有文件?

如何 chown/chmod 当前目录中的所有文件?

我正在尝试更改当前目录中某些文件(和目录)的所有权和权限。我试过这个:

chown username:groupname .

...期望它会影响当前目录中的所有文件,但实际上它只影响我所在的目录(这与我想要做的相反)。我想在所有文件上进行更改,而不影响我所在的当前目录。

我怎样才能 chown 和 chmod 当前目录中的所有文件?

答案1

您想使用chown username:groupname *,并让 shell 将 展开*为当前目录的内容。这将更改当前目录中所有文件/文件夹的权限,但不会更改文件夹的内容。

您还可以执行chown -R username:groupname .,这将更改当前目录的权限,然后在其内部和所有子文件夹内向下递归以更改权限。

chown -R username:groupname *将以递归方式更改所有文件和文件夹的权限,同时保留当前目录本身。这种风格和第一种风格是我最常使用的。

答案2

我想你想要这个:

chown username:groupname *

如果您还想递归更改子目录,则需要使用-R(-r已弃用) 开关:

chown -R username:groupname *

答案3

chown如果您是超级用户,这很棒。我遇到一个问题,其他人在我的目录中运行make,现在拥有一些我无法修改的文件。这是我处理文件和目录的解决方法,尽管如果它无法删除它们,它会将目录和后缀留在原处.mkmeowner

  • 以下脚本将传递给它的文件和目录的所有权更改为当前用户所有,尝试通过复制每个不属于当前用户的目录或文件的新副本、删除(或尝试删除)原始文件并进行适当重命名来解决权限问题。
  • 其目的是使其成为“make me own”的缩写。我不使用下划线,因为它们很难输入。

例子:

% 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

答案4

更改username:groupname当前目录中所有文件的另一种方法是使用子 shell:

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

bash 内置命令与子 shell 中的find正则表达式一起使用,可以作为更复杂的管理任务的基础。[a-zA-Z0-9]*$()

相关内容