无法 Bash chgrp GROUP /home/*/SOMEFILE/ 怎么办?

无法 Bash chgrp GROUP /home/*/SOMEFILE/ 怎么办?

因此,我设置一个代码,将文件的组所有者更改为特定组。

PS 有超过 10 个用户,具有相同的文件夹和文件结构,我想更改每个文件夹中特定文件的所有权。

这样,如果有人编辑该文件,在 10 秒内(使用cronsleep函数),它会将组所有者更改为特定组。

这是我使用的代码,并创建了一个名为owner.sh的文件

chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10

它应该可以工作,但是当我试图攻击它时,

bash owner.sh 

它说不/home/*/private/FILE.TXT存在,但如果我手动运行它,那就是

chgrp www-data /home/*/private/FILE.TXT

,它会进入每个用户的文件夹并更改该特定文件的组。

那么如何让它按照我想要的方式工作呢?

答案1

尝试:

#!/bin/bash
while true; do
    for user in $(ls /home); do
        chgrp www-data /home/${user}/private/FILE.TXT
    done
    sleep 10
done

无限循环是为了绕过 1 分钟重复作业的 cron 限制。使其可执行:

chmod +x /PATH/TO/owner.sh

并且只需在没有 cronjob 的情况下运行它即可。

另外,如果您只想对文件的修改做出反应并直接修改该文件的所有权,您可以使用 inotify-tools:

#!/bin/bash
for user in $(ls /home); do
    inotifywait -mqe close_write /home/${user}/private/FILE.TXT --format %f | while IFS= read -r file; do chgrp www-data $file; done
done

只需运行一次

相关内容