在所有文件夹上运行 chown 并将所有者设置为文件夹名称减去尾随 / 的脚本

Shi*_*oki 4 linux ssh shell bash

一些麻木跑了chown -R username。在我们的网络服务器上的 /home 文件夹中,认为他在所需的文件夹中。毋庸置疑,服务器正在抛出很多问题。

我们有 200 多个网站,我不想将它们全部单独列出,因此我正在尝试制作一个脚本,将所有文件夹的所有者更改为文件夹名称,不带尾随 /。

到目前为止,这就是我所拥有的一切,一旦我可以删除 / 就可以了,但我还想检查文件是否包含 . 在其中,如果没有,则运行该命令,否则转到下一个。

#!/bin/bash
for f in *

do

    test=$f;
    #manipluate the test variable
    chown -R $test $f

done
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒!

提前致谢!

Lek*_*eyn 6

假设/home/目录下的所有文件夹代表用户名,可以使用:

for dir in /home/*/; do
    # strip trailing slash
    homedir="${dir%/}"
    # strip all chars up to and including the last slash
    username="${homedir##*/}"

    case $username in
    *.*) continue ;; # skip name with a dot in it
    esac

    chown -R "$username" "$dir"
done
Run Code Online (Sandbox Code Playgroud)

我建议之前运行一个测试循环,检查用户名是否真正匹配主目录。

此 AWK 命令检索给定用户的主目录。

awk -F: -v user="$username" '{if($1 == user){print $6}}' < /etc/passwd
Run Code Online (Sandbox Code Playgroud)

对照现有的主目录检查此结果是读者的练习。