为什么是这样的?请指点

sh/bash/dash/ksh/zsh等Shell脚本
回复
youwang
帖子: 5
注册时间: 2012-11-01 10:46
系统: opensuse 12.2

为什么是这样的?请指点

#1

帖子 youwang » 2012-12-19 12:01

一、我想删除*.txt以外的文件。
cook@linux-ir2d:~/downloads> rm -rf *.!(txt)
bash: !: event not found
cook@linux-ir2d:~/downloads> rm -rf *.^[txt]
cook@linux-ir2d:~/downloads> rm -rf *.[^t]xt
都不行。应该怎么用SHELL做到?
二、目录下有个vds2目录
cook@linux-ir2d:~/downloads> ls vd??
cook@linux-ir2d:~/downloads> ls vd*
cook@linux-ir2d:~/downloads> ls
b123 conf12.log conf.23.log conf25.log dddv3 gg13f ghtml g.html gssst g.txt gtxtt5 vds2 v.txt
cook@linux-ir2d:~/downloads>

看出问题了吧,为什么? *用不成?
头像
Strange
帖子: 1824
注册时间: 2006-05-19 9:54
来自: Shanghai

Re: 为什么是这样的?请指点

#2

帖子 Strange » 2012-12-19 12:21

find -not -name "*.txt" -a -type f | xargs rm -f
ls -d vd*
ニンニク入れますか?
x60 with gentoo
头像
mark1991
帖子: 218
注册时间: 2007-02-12 19:46

Re: 为什么是这样的?请指点

#3

帖子 mark1991 » 2012-12-22 0:44

youwang 写了:一、我想删除*.txt以外的文件。
cook@linux-ir2d:~/downloads> rm -rf *.!(txt)
bash: !: event not found
cook@linux-ir2d:~/downloads> rm -rf *.^[txt]
cook@linux-ir2d:~/downloads> rm -rf *.[^t]xt
都不行。应该怎么用SHELL做到?
二、目录下有个vds2目录
cook@linux-ir2d:~/downloads> ls vd??
cook@linux-ir2d:~/downloads> ls vd*
cook@linux-ir2d:~/downloads> ls
b123 conf12.log conf.23.log conf25.log dddv3 gg13f ghtml g.html gssst g.txt gtxtt5 vds2 v.txt
cook@linux-ir2d:~/downloads>

看出问题了吧,为什么? *用不成?
第二个问题,为什么我这里似乎可以用?
菜鸟一个,希望大家多多帮助.
Dropbox…
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 为什么是这样的?请指点

#4

帖子 枫叶饭团 » 2012-12-22 1:02

第一个用find,第二个我这没问题
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 为什么是这样的?请指点

#5

帖子 aerofox » 2012-12-22 22:41

第一个问题,设置extglob选项:

代码: 全选

shopt -s extglob
然后就可以

代码: 全选

rm !(*.txt)
设置选项的命令可以放到 ~/.bashrc 中

第二个问题,用

代码: 全选

ls -l --quoting-style=shell
看看到底有些什么文件。
回复