我正在尝试更改当前目录中某些文件(和目录)的所有权和权限。我试过这个:
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]*
$()