2014-05-05 49 views
0

我想在我的服务器上设置一个快捷方式功能来修复新的站点文件夹的权限(也许这是不好的做法,但我还是想解决以下问题:)查找与可变目录(但没有名称)抛出找到:路径必须先于表达式:找到

function webmod { chown -R rafe:www-data $1; find '$1' -type d -exec chmod 775 '{}' \; find '$1' -type f -exec chmod 664 '{}' \; chmod g+s -R $1; } 

当我使用webmod directory/name/here它只是抛出

find: paths must precede expression: find 
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] 

我在做什么错?

在此先感谢!

回答

1

\; find之间加上分号。否则,第一个查找得到第二个作为参数:-)

+0

哈!问题很简单,谢谢! – Rafe

1

单引号字符串不是由外壳插代替,:

find '$1' ... 

尝试:

find "$1" ... 

另外,不要忘记引用参数CHOWN /文件模式:

chown -R rafe:www-data "$1" 
+0

我仍然得到相同的错误,改为引用,代码现在是'功能webmod {chown -R rafe:www-data“$ 1”;找到“$ 1”-type d -exec chmod 775'{}'\;找到“$ 1”-type f -exec chmod 664'{}'\; chmod g + s -R“$ 1”; }' – Rafe

+0

@Rafe:错误是一样的(正如你在我的回答中看到的),但他仍然是对的:当使用''$ 1''时你不会得到任何匹配。 –

+0

好的,谢谢你的解释 – Rafe

0

我想最好是在find exec中调用脚本,而不是寻找复杂的查找语句。如果是这样的答案已经被 “perreal” 给出

或者你可以有一个脚本 script1.sh

if [ -d "$1" ] ; then 
    chmod 775 $1; 
elif [ -f "$1" ]; then 
    chmod 664 $1 

fi 
fi 

并找到会是这个样子:

find $1 -exec ./script1.sh {} \; chmod g+s -R $1

这如果你想对这些文件做更多的事情,你可以通过在脚本中扩展它来完成。 但是为了使这个解决方案适用,你必须在你的环境中有一个脚本。

+0

谢谢,很好的建议 - 但我想把所有东西放在一个文件中! – Rafe

相关问题