列出与文件名中给定字符串不匹配的文件

列出与文件名中给定字符串不匹配的文件

我有一个目录,其中创建了许多具有该名称的文件(大约 200 个)temp_log.$$以及我需要检查的其他几个重要文件。

如何轻松列出所有文件并排除temp_log.$$显示的文件?

预期产出

$ ls -lrt <exclude-filename-part>
-- Lists files not matching the above given string

我已经浏览了ls手册页,但在此参考文献中找不到任何内容。如果我在这里遗漏了任何重要信息,请告诉我。

谢谢

答案1

使用 GNU ls(非嵌入式 Linux 和 Cygwin 上的版本,有时也在其他地方找到),您可以在列出目录时排除某些文件。

ls -I 'temp_log.*' -lrt

-I(注意is的长形式--ignore='temp_log.*'

使用 zsh,您可以让 shell 进行过滤。传递-dtols以避免列出匹配目录的内容。

setopt extended_glob          # put this in your .zshrc
ls -dltr ^temp_log.*

通过 ksh、bash 或 zsh,您可以使用 ksh 过滤语法。在 zsh 中,setopt ksh_glob首先运行。在 bash 中,shopt -s extglob首先运行。

ls -dltr !(temp_log.*)

答案2

您可以grep与选项一起使用-v

ls -lrt | grep -v <exclude-filename-part>

答案3

您可以find为此使用:

find . \! -name 'temp_log*'

这只会打印名称,您可以添加-ls以制作ls -l带有时间戳和权限的样式输出,或者用于-exec ls {} +实际传递给 ls 以及您想要的列、排序等选项。

我写这篇文章时假设这只是目录中的文件。如果该目录包含其他目录,您可能希望避免递归列出它们

find . \! -name 'temp_log*' -maxdepth 1

如果您使用 ls 您将需要传递 -d 选项来停止从目录内列出:-exec ls -d {} +

答案4

做就是了

ls -ltr `grep -il patterntosearch  *`

相关内容