Answers:
使用GNU ls
(非嵌入式Linux和Cygwin上的版本,有时在其他地方也可以找到),列出目录时可以排除某些文件。
ls -I 'temp_log.*' -lrt
(请注意-I
is 的长格式--ignore='temp_log.*'
)
使用zsh,可以让shell进行过滤。传递-d
到ls
以免上市匹配目录的内容。
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.*)
-Itemp_log.*
-I
-I
。但是,*
需要以一种或另一种方式引用。-I temp_log.*
不工作,但-I 'temp_log.*'
,-I "temp_log.*"
,-I temp_log.\*
,等都是精品。
您可以find
为此使用:
find . \! -name 'temp_log*'
这将只打印名称,您可以添加-ls
以ls -l
使用时间戳和权限来生成样式输出,或者使用-exec ls {} +
想要的用于列,排序等的任何选项将其实际传递给ls。
我写这是假设这只是目录中的文件。如果该目录包含其他目录,则可能要避免递归列出它们
find . \! -name 'temp_log*' -maxdepth 1
如果使用ls,则需要传递-d选项以阻止它在目录中列出:-exec ls -d {} +
-maxdepth 1
模仿非递归ls
。
我认为您想使用外壳的功能,而不是的功能ls
。我使用bash,因此检查了您想要的内容man bash
。搜索“ ^ EXPANSION”(首先按“ /”)。摘抄:
扩张
︙
拆分成单词后,在命令行上执行扩展。执行了七种扩展: 大括号扩展, 代字号扩展, 参数和变量扩展,命令替换,算术扩展,单词拆分和路径名扩展。
... <
片段> ... ︙路径名扩展
词的拆分之后,除非-f选项设置,bash的扫描字符每个字
*
,?
和[
。如果出现这些字符之一,则将该单词视为模式,并替换为与该模式匹配的按字母顺序排序的文件名列表。…
我最近开始使用如下命令根据文件的首字母排除文件:
$ ls ./[^t]*
这将匹配所有以字母开头的内容t
。如果在方括号之间添加更多字符,则也将排除以这些字母开头的文件。
寻找链接,我很好。请参阅模式匹配。从那里开始,这将适合您的情况:
$ ls -lrt ./!(temp_log.*)
如Gilles所述,这要求extglob
使用shopt
buildin(shopt -s extglob
)启用shell选项。
由于文件,你不希望打印有“temp_log。” 在文件名中,然后使用grep过滤掉:
ls -lrt | grep -v "temp_log."
注意:另一个具有类似答案的帖子可能被否决了,因为用户未在grep应该查找的字符串周围包含引号“”。没有引号,它不会像广告中那样起作用。
temp_log
这不是一个很好的(普通)的方式来排除。ls
结果。
-F
,@ smokes2345; 句点将匹配基本正则表达式中的任何字符。参见:unix.stackexchange.com/q/119905/117549
ls --hide='temp_log.$$'
应该可以工作。您也可以/也应该使用通配符来扩展它,具体取决于整个术语的哪一部分temp_log.$$
。