【发布时间】:2019-04-23 05:44:07
【问题描述】:
我尝试将以下命令放入 bash 别名中。该命令本身可以正常工作,但是当我尝试为其设置别名时,出现以下错误:
命令
find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "$(find "{}" -type f | wc -l)" {}' \; | sort -nr
别名
alias csfiles='find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "$(find "{}" -type f | wc -l)" {}' \; | sort -nr'
错误:
-sh: alias 0: not found
-sh: alias {} \; | sort nr: not found
我认为这意味着我没有正确使用引号,但我无法确定正确的组合。帮忙?
【问题讨论】:
-
我已经有一段时间没有使用别名了,但我认为您的别名太复杂了。我相信别名只是用来缩短一个带有参数的命令,即
alias l='ls -al'。您可能需要创建一个函数csfiles。但是已经有一段时间了,所以我可能弄错了。 -
我第二次创建一个 bash 函数来执行此操作。你可以用同样的方式调用它,如果需要的话可以传递参数。
-
如前所述,
find命令对于某些文件名(例如包含双引号的文件名)将失败。不要尝试在命令中嵌入{};仅将其用作sh的参数。sh -c '....' _ {}。无论您在哪里使用{},请使用$1。 -
@chepner 这是一个非常好的观点!