我在使用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’
,这意味着子字符串不起作用。
谢谢!
答案 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}