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論壇】
|
|
| 相關文章 |
|
====== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |