我有以下 bash 脚本(另存为~/fix-perms.sh
):
#!/usr/bin/env bash
inotifywait -d -r -e close_write -o /dev/stdout ~/testdir |
while read path event file; do
sudo chown user:group "$path$file"
if [ -d "$file" ]; then
sudo chmod 750 "$path"
echo "Created directory '$path' with 750 permissions"
else
sudo chmod 640 "$path$file"
echo "Created file '$path$file' with 640 permissions"
fi
done
我认为该脚本的预期目的很明显,但在我的环境中运行它.bashrc
无法正确设置组权限,如下所示:
# In .bashrc
~/fix-perms.sh &
# In bash session
user@CentOS8:~/testdir$ ls -lha
drwxr-x--- 8 user group 4.0K Jun 18 13:06 .
drwxr-x--- 8 user group 4.0K Jun 18 11:45 ..
drwxr-x--- 12 user group 4.0K Jun 15 21:23 somedir
-rw-r----- 1 user group 316 Jun 15 23:23 somefile
-rw-r----- 1 user group 1.1K Jun 15 21:24 someotherfile
user@CentOS8:~/testdir$ mkdir subdir
user@CentOS8:~/testdir$ ls -lha
drwxr-x--- 8 user group 4.0K Jun 18 13:06 .
drwxr-x--- 8 user group 4.0K Jun 18 11:45 ..
drwxr-x--- 12 user group 4.0K Jun 15 21:23 somedir
-rw-r----- 1 user group 316 Jun 15 23:23 somefile
-rw-r----- 1 user group 1.1K Jun 15 21:24 someotherfile
drwx------ 12 user group 4.0K Jun 15 21:23 subdir
正如您所看到的,该subdir
目录已创建并被赋予了正确的所有权,但chmod
由于某种原因该命令失败而没有错误。那么我做错了什么? MTIA! :-)
编辑:我已经确认正在inotifywait
通过向脚本添加一些 echo 语句来监视目录,每当我将文件或文件夹添加到 .txt 文件时,其输出现在都会显示在终端中~/testdir
。我还将事件从 更改为 ,create
希望close_write
这可以更好地处理我的用例。
答案1
@muru 上面的评论让我思考我是如何测试正在创建的内容,并让我意识到我非常愚蠢。以下代码~/fix-perms.sh
运行良好:
#!/usr/bin/env bash
inotifywait -dr -e create -o /dev/stdout ~/testdir |
while read path event file; do
sudo chown user:group "$path$file"
if [[ $event == *"ISDIR" ]]; then
sudo chmod 750 "$path$file"
else
sudo chmod 640 "$path$file"
fi
done