从ls --ignore排除特定的嵌套目录

时间:2018-10-12 12:16:51

标签: bash shell ls

我需要列出名为app的目录中的所有目录。 目录列表看起来像

app/frontend
app/authservice
app/mailservice
...............
...............

我想列出根目录中app/frontend以外的应用程序目录中的所有目录。

我成功使用grep -v命令

获得了所需的输出。
ls -d /app/packages/*/ | grep -v packages/frontend/

但是我想通过在ls命令中使用--ignore得到同样的结果。

1 个答案:

答案 0 :(得分:2)

ls --ignore用于隐式条目,例如,在不使用-d的情况下列出目录的内容,或在使用ls -R的递归列表中的情况。它不适用于您通过/app/packages/*/完成的在命令行上传递的条目。重要的是,扩展*全局范围的是Shell,而不是ls,因此就ls而言,frontend目录已被明确写出。

您可以使用外壳程序功能来省略特定目录。这个扩展的glob将列出除frontend之外的所有目录:

ls -d /app/packages/!(frontend)/

(在脚本中,您将需要shopt -s extglob。扩展glob通常在交互式shell中默认为启用,但在脚本中为禁用。)