哪个命令返回所有以一位数字结尾且具有 TXT 扩展名的文件?
答案1
用于定位文件(或其他类型的节点)的最基本工具之一是该find
实用程序。
find ./ -type f -name '*[!0-9][0-9].txt'
这将搜索:
- ...从当前目录 (
./
) 递归。您可以将其更改为另一个路径,甚至可以将其保留,因为这是大多数版本的默认值find
。 - ...对于文件项而不是目录、设备节点、符号链接等 (
-type f
)。如果您还想查找其他类型,则可以忽略此选项。 - ...与给定名称模式匹配的项目。请注意,我使用单引号将模式括起来,以便 bash 或您的 shell 在 find 获取命令之前不会尝试将其解释为 glob 模式。星号匹配任意数量的字符,那么文件的结尾必须不是数字,然后是数字,然后是扩展名。 (
-name '*[0-9].txt'
)
如果存在文件名仅是一个数字后跟 的文件.txt
,则上面的命令将错过它们,因为它要求数字前有一个非数字。以下等效命令使用布尔运算符来包含仅包含数字的文件名(-o
is“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_glob
in ~/.zshrc
:
print -lr -- *[0-9].txt~*[0-9][0-9].txt
如果您的文件名不以以下形式开头-
且不包含以下内容,\
您可以节省一些输入:
print -l *[0-9].txt~*[0-9][0-9].txt
替换print -l
为echo
以显示名称之间有空格而不是换行符。替换print -l
为ls -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