[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 系統管理 > 其它 > 正文
在 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論壇

相關文章

======
 

★  樊強制作 歡迎分享  ★