使用find查找具有不同所有权的目录

时间:2017-02-10 16:15:58

标签: bash

我在使用find测试目录所有权时遇到问题。我相信这是由于处于子过程中,但我不确定。

#!/bin/bash

EXAMPLE_DIR_OWNER="testuser:testgroup"
EXAMPLE_DIR_PERMS=2775

directories=()
while IFS=  read -r -d $'\0'; do
    directories+=("$REPLY")
done < <(sudo /bin/find /Testdir/ -maxdepth 1 -type d -print0 ! -perm ${EXAMPLE_DIR_OWNER} -or ! -group ${EXAMPLE_DIR_OWNER#:*} -or ! -user ${EXAMPLE_DIR_OWNER%*:} -print0)

当我运行此脚本时,我收到错误/bin/find: invalid mode ‘testuser:testgroup’,这意味着子字符串不起作用。

谢谢!

2 个答案:

答案 0 :(得分:1)

"${var%pattern}"从最后修剪该模式,而"${var#pattern}"从一开始修剪。 ${EXAMPLE_DIR_OWNER#:*}因此会从变量内容的开头修剪以:开头的字符串,除非这些内容中的第一个字符是:,否则不会执行任何操作。

因此:

-user "${EXAMPLE_DIR_OWNER%:*}"  # trim from last : to end of contents
-group "${EXAMPLE_DIR_OWNER#*:}" # trim from beginning to first :

有关相关语法的更多信息,请参阅the bash-hackers page on parameter expansion

答案 1 :(得分:0)

您的find部分读取:

 -perm ${EXAMPLE_DIR_OWNER}

${EXAMPLE_DIR_OWNER}的值为"testuser:testgroup"。这不是有效模式,错误明确指出。你可能想要:

 -perm ${EXAMPLE_DIR_PERMS}