使用变量目录查找(但没有-name)会抛出find:paths必须位于表达式:find之前

时间:2014-05-05 08:41:03

标签: linux bash find

我正在尝试在我的服务器上设置一个快捷方式功能来修复新网站文件夹的权限(也许这是不好的做法,但我仍然想解决以下问题:)

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]

我做错了什么?

提前致谢!

3 个答案:

答案 0 :(得分:1)

单引号字符串不由shell插入,而不是:

find '$1' ...

尝试:

find "$1" ...

另外,不要忘记将参数引用到chown / chmod:

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

答案 1 :(得分:1)

\; find之间添加分号。否则,第一个find将第二个作为参数: - )

答案 2 :(得分: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

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