gpt4 book ai didi

linux - 使用 grep 列出目录中的条目

转载 作者:太空狗 更新时间:2023-10-29 11:19:47 26 4
gpt4 key购买 nike

我正在尝试列出名称仅包含大写字母的目录中的所有条目。目录需要附加“/”。

#!/bin/bash
cd ~/testfiles/
ls | grep -r *.*

由于 grep 默认只查找大写字母(对吗?),我只是在 testfiles 下的目录中递归搜索所有只包含大写字母的名称。

不幸的是,这不起作用。

至于附加目录,我不确定为什么我需要这样做。有谁知道我可以从哪里开始详细解释我可以用 grep 做什么?此外如何解决我的问题?

最佳答案

不,grep 不只考虑大写字母。

你的问题我有点不清楚,例如:

  • 从您对 -r 选项的使用来看,您似乎想要递归搜索,但您没有明说。为简单起见,我假设您不需要;如果您需要递归,请考虑查看@twm 的答案。
  • 您只想查找大写(字母)。这是否意味着您不想接受任何其他(非字母)字符,但这些字符对文件名有效(如数字或破折号、点等)
  • 因为你没有说我不允许每行只在一个文件上,所以我假设它没问题(因此使用ls -1)。

天真的解决方案是:

ls -1 | grep "^[[:upper:]]\+$"

也就是说,打印所有只包含大写字母的行。在我打印的 TEMP 目录中,例如:

ALLBIG
LCFEM
WPDNSE

但是,这会排除像 README.TXTFILE001 这样的文件,根据您的要求(见上文),这些文件很可能会被包括在内。

因此,更好的解决方案是:

ls -1 | grep -v "[[:lower:]]\+"

也就是说,打印所有不包含小写字母的行。在我打印的 TEMP 目录中,例如:

ALLBIG
ALLBIG-01.TXT
ALLBIG005.TXT
CRX_75DAF8CB7768
LCFEM
WPDNSE
~DFA0214428CD719AF6.TMP

最后,要“正确标记”带有尾随“/”的目录,您可以使用 -F(或 --classify)选项。

ls -1F | grep -v "[[:lower:]]\+"

同样,示例输出:

ALLBIG
ALLBIG-01.TXT
ALLBIG005.TXT
CRX_75DAF8CB7768
LCFEM/
WPDNSE/
~DFA0214428CD719AF6.TMP

请注意,如果您可以接受不同的输出(例如 find !-regex ".*[a-z].*"),则可以使用 find ), 但会有不同的输出。

关于linux - 使用 grep 列出目录中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14715387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com