我正在尝试为以下命令创建别名,这些命令以递归方式将当前目录中的所有文件权限转换为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中自行运行。为了将命令作为别名运行,您需要做些什么特别的事情吗?
谢谢!
答案 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来提高它的可读性。