Unix 命令返回所有以一位数和 TXT 扩展名结尾的文件

Sai*_*Sai 3 ls wildcards files

哪个命令返回所有以一位数字结尾并具有 TXT 扩展名的文件?

Cal*_*leb 8

用于定位文件(或其他类型的节点)的最基本工具之一是该find实用程序。

find ./ -type f -name '*[!0-9][0-9].txt'
Run Code Online (Sandbox Code Playgroud)

这将搜索:

  • ...从当前目录 ( ./)递归。您可以将其更改为另一条路径,甚至将其关闭,因为这是大多数find.
  • ...对于作为文件而不是目录、设备节点、符号链接等 ( -type f) 的项目。如果您也想找到其他类型,则可以取消此操作。
  • ...对于匹配给定名称模式的项目。请注意,我使用单引号将模式括起来,这样 bash 或您的 shell 就不会在 find 甚至获取命令之前尝试将其扩展为 glob 模式。星号匹配任意数量的字符,然后文件的结尾必须不是数字,然后是数字,然后是您的扩展名。( -name '*[0-9].txt')

如果文件名只有一个数字后跟.txt,上面的命令会漏掉它们,因为它要求数字前有一个非数字。以下等效命令使用布尔运算符来包含仅包含数字的文件名(-o即“或”和!“非”):

find ./ -type f \( -name '*[!0-9][0-9].txt' -o -name '[0-9].txt' \)
find ./ -type f -name '*[0-9].txt' ! -name '*[0-9][0-9].txt'
Run Code Online (Sandbox Code Playgroud)

请注意,这将区分大小写。如果你想要一个不敏感的匹配,你也可以使用-iname代替-name来匹配类似的东西file4.TXT。另请注意,仅仅因为文件声称是具有该扩展名的文本文件并不意味着它是。在 linux 上,无论名称如何,任何文件都可以是任何类型。也可能存在带有其他扩展名或根本没有扩展名的文本文件。


dub*_*jim 6

使用普通的旧 POSIX glob:

ls -d -- [0-9].txt *[!0-9][0-9].txt
Run Code Online (Sandbox Code Playgroud)

  • 由于 OP 要求 *一位数字*,因此类似 `*[^0-9][0-9].txt` 之类的内容可能是更好的 glob(尽管这会遗漏仅由一位数字加上 .txt 组成的文件名。 (3认同)