[ 永远的UNIX::UNIX技术资料的宝库 ]

首页 > 系统管理 > 其它 > 正文
在 shell 中要用怎样的 pattern 来表示除了 "." 与 ".." 外的所有档案?
Steve Hayman (2001-04-19 10:37:44)

这个问题看来容易。因为你可以用 

*       表示所有不是以 "." 为开端的档案 

.*      表示所有以 "." 为开端的档案,但是这样会把 "." 和 ".." 也包 
        含进来,但是通常你并不会想把这两个也含进来。 

.[!.]*  这只有比较新的 shells 才能用;某些 shells 用 "^" 代替 "!"; 
        而符合 POSIX 标准的 shells 一定苡?nbsp;"!",但是大部份也都能接 
        受 "^";所有具可移植性的应用程式都不应该在 "[" 之后紧接著没被 
        quota 起来的 "^")表示所有以 "." 为开头并且第二个字元不是 "." 
        的档案;但是这样却会漏掉 "..foo" 这类的档案。 

.??*    表示所有以 "." 为开头且档名长度至少为 3 的档案,这样大概 
        就能避开 "." 和 ".." 了,但是却还是会漏掉 ".a" 这类的档。 

所以想要正确地表示除了 "." 与 ".." 之外所有的档案,你必须要用到 3 
个 patterns(如果你没有像 ".a" 这样的档案,那你可以去掉第一个 
pattern): 

        .[!.]* .??* * 

或者你也可以用一两个外部程式和 backquote substitution。这样就很完 
美了: 


      `ls -a | sed -e '/^\.$/d' -e '/^\.\.$/d'` 

        (or `ls -A` in some Unix versions) 

不过即使是这样做,碰上档名里面含有换行字元, IFS 字元,或是万用字 
元仍然是没辄。  (http://www.fanqiang.com)
    进入【UNIX论坛

相关文章

===更多相关===
 

★  樊强制作 欢迎分享  ★