将find命令作为别名

时间:2011-09-01 21:36:26

标签: linux bash shell

我正在尝试为以下命令创建别名,这些命令以递归方式将当前目录中的所有文件权限转换为644,另一个将所有目录转换为755。

alias fixpermissions='cd ~/public_html/wp-content/themes/presstheme; find . -type f -exec chmod 644 {} \; find . -type d -exec chmod 755 {} \; cd'

然而,当我跑步时,我得到:

find: paths must precede expression

这些find命令可以在shell中自行运行。为了将命令作为别名运行,您需要做些什么特别的事情吗?

谢谢!

4 个答案:

答案 0 :(得分:4)

你需要更多的半冒号来分隔实际的命令命令(而不是终止它们),即

 alias fixpermissions='cd ~/public_html/wp-content/themes/presstheme; find . -type f -exec chmod 644 {} \; ; find . -type d -exec chmod 755 {} \; ; cd'

您可以通过在cd有条件执行后执行每个命令,即只检查您的别名dir(如果存在,允许将别名移动到其他机器的情况),即可查询您的别名,即

 alias fixpermissions='cd ~/public_html/wp-content/themes/presstheme && find . -type f -exec chmod 644 {} \; && find . -type d -exec chmod 755 {} \; && cd'

我希望这会有所帮助。

答案 1 :(得分:2)

你需要额外的分号来将两个find命令与周围环境分开:

alias fixpermissions='cd ~/public_html/wp-content/themes/presstheme; find . -type f -exec chmod 644 {} \; ; find . -type d -exec chmod 755 {} \; ; cd'

您可以从使用子shell中受益;那么你不需要最后的cd(它带你回家,而不是回到你来自的地方):

alias fixpermissions='( cd ~/public_html/wp-content/themes/presstheme; find . -type f -exec chmod 644 {} \; ; find . -type d -exec chmod 755 {} \; )'

而且,因为我在有别名之前就开始使用shell,所以我会把它变成bin目录中的清晰脚本:

cd ~/public_html/wp-content/themes/presstheme
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

也许我也会对它进行参数化:

cd ${1:-"~/public_html/wp-content/themes/presstheme"}
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

然后我可以指定一个不同的目录,但是它会默认为“正常”目录。

答案 2 :(得分:1)

你错过了结束第一个find命令的分号。您只提供了以chmod命令结束的分号。

alias fixpermissions='find ~/public_html/wp-content/themes/presstheme -type f -exec chmod 644 {} \; ; find ~/public_html/wp-content/themes/presstheme -type d -exec chmod 755 {} \; cd'

答案 3 :(得分:0)

我想也许你应该使用Bash functions来提高它的可读性。