【问题标题】:How can I grep to filter results from ls?如何 grep 过滤来自 ls 的结果?
【发布时间】:2017-04-07 17:38:21
【问题描述】:

我的 grep 命令有问题。 我有 3 个任务:

a) 仅查找并显示“ls -l”的目录

ls -l | grep ^d   # which works good

b) 仅名称以数字开头的文件

ls | grep ^[0-9] 

也可以,但是对于文件和目录,它必须只对文件有效,我该怎么做?

c) 对组具有“x”权限的文件

ls -l | grep "^-*x" # it shows every file

如何使 b) 和 c) 的这些命令有效?

【问题讨论】:

标签: bash unix terminal grep


【解决方案1】:

a) 仅查找并显示“ls -l”的目录

find . -maxdepth 1 -mindepth 1 -type d -exec ls -l {} \;

b) 仅名称以数字开头的文件

find . -maxdepth 1  -type f -name "[0-9]*"

c) 对组具有“x”权限的文件

find  . -maxdepth 1 -type f -perm /g+x

【讨论】:

  • 嘿。我只自己回答了这个问题,因为我担心会有其他答案试图采用字面主义的方法。显然我不必担心。也就是说,正如当前使用 -regex 实现的那样,(b) 是不必要的不​​兼容(需要 GNU 对 find 的扩展),并且如果文件位于以数字开头的目录中,它将匹配任何文件。
  • 如果添加-ls 操作,您将获得与ls -l 相同的输出。
  • 我指的是实际的-ls 操作:find . -maxdepth 1 -mindepth 1 -type d -ls(但据我所知,POSIX 并未指定)。
  • 顺便说一句,-exec ... {} + 自 2006 年以来一直是 POSIX 指定的(IIRC,并且在此之前就可用),使其成为-exec ... {} \; 更有效的替代命令(如ls),其中可以在单个命令行上传递要操作的多个文件。
猜你喜欢
  • 2014-03-08
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 2018-07-26
相关资源
最近更新 更多