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

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

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

答案1

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

find ./ -type f -name '*[!0-9][0-9].txt'

这将搜索:

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

如果存在文件名仅是一个数字后跟 的文件.txt,则上面的命令将错过它们,因为它要求数字前有一个非数字。以下等效命令使用布尔运算符来包含仅包含数字的文件名(-ois“or”和!is“not”):

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'

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

答案2

使用普通的旧 POSIX glob:

ls -d -- [0-9].txt *[!0-9][0-9].txt

答案3

在 zsh 中,使用setopt extended_globin ~/.zshrc

print -lr -- *[0-9].txt~*[0-9][0-9].txt

如果您的文件名不以以下形式开头-且不包含以下内容,\您可以节省一些输入:

print -l *[0-9].txt~*[0-9][0-9].txt

替换print -lecho以显示名称之间有空格而不是换行符。替换print -lls -d以查看格式化的文件名ls(例如,颜色,取决于您的别名),或者ls如果没有匹配项是目录,则替换为:

ls *[0-9].txt~*[0-9][0-9].txt

如果您还想查看子目录中的文件,请**/在模式之前添加:

ls **/*[0-9].txt~*[0-9][0-9].txt

答案4

返回以一位数字结尾且扩展名为 .txt 的文件的 Unix 命令

ls -l *[0-9].txt

相关内容