![[ 永远的UNIX::UNIX技术资料的宝库 ]](/images/title.gif)
|
| 首页 > 系统管理 > 其它 > 正文 |
 |
| 在 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论坛】
|
|
| 相关文章 |
|
===更多相关=== |
|
|
 |
★ 樊强制作 欢迎分享 ★ |