我有一个目录,其中创建了许多具有该名称的文件(大约 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 进行过滤。传递-d
tols
以避免列出匹配目录的内容。
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 *`