Linuxrm删除指定文件外的其他文件方法汇总
一、Linux下删除文件和文件夹常用命令如下:
删除文件:
rm
file
删除文件夹:
rm
-rf
dir
需要注意的是,
rmdir
只能够删除
空文件夹。
二、删除制定文件(夹)之外的所有文件呢?
1、方法1,比较麻烦的做法是:
复制需要保留的文件到其他文件夹,然后将该目录删除,
然后将需要保留的移动
回来。
mv
keep
../
#保留文件(夹)
keep
rm
-rf
*
#删除当前文件夹里的所有文件
mv
../keep
./
#将原来的东西移动回来
2、方法2,需要在当前文件夹中进行:
rm
-rf
!(keep)
#删除keep文件之外的所有文件
rm
-rf
!(keep1
|
keep2)
#删除keep1和keep2文件之外的所有文件
3、方法3,当前文件夹中结合使用grep和xargs来处理文件名:
ls
|
grep
-v
keep
|
xargs
rm
#删除keep文件之外的所有文件
说明:
ls先得到当前的所有文件和文件夹的名字,
grep
-v
keep,进行grep正则匹配查找keep,-v参数决定了结果为匹配之外的结果,也就是的到了keep之外的所有文件名,然后
xargs用于从
标准输入获得参数
并且传递给后面的命令,这里使用的命令是
rm,然后由rm删除前面选择的文件。
好处:使用了grep来正则表达式来匹配文件名字,可以一次保留多个文件,从而进行更加准确的处理。
4、方法4,使用find命令代替ls,改进方法3从而能够处理制定文件夹的文件:
find
./test/
|
grep
-v
keep
|
xargs
rm
#删除当前test文件夹中keep文件之外的所有文件
说明,用grep而不用find
-name选取名字,因为find选取名字时比较麻烦,对正则表达式支持不够,无法排除指定文件名。
5、方法5,直接使用find命令删除其他文件:
find
./
-name
'[^k][^e][^e][^p]*'
-exec
rm
-rf
{}
\;
#删除keep以外的其他文件。
find
./
-name
'[^k][^e][^e][^p]*'
|
xargs
rm
-rf
#删除keep以外的其他文件。推荐!
说明:上面第二行的代码效率高些,原因在于删除多个文件时
-exec会启动多个进程来处理,而xargs会启动一个rm进程来处理。
关于find
执行命令的效率和借用xargs启动的命令效率的比较,详情请参考:http://www.linuxsir.org/main/?q=node/137
Linux文件查找命令find,xargs详述
http://www.linuxsir.org/main/?q=node/137
本文转载自:http://blog.sina.com.cn/s/blog_70ffb5c501011rrk.html
rm删除除去指定文件的剩余所有文件 (rm 反向删除)
zhou@zhou:~/LinuxC/file/test$ ls
1
23sdfwe
88888888
aabb
ag
ghdda
mmm
2
3
aaaaaaaa
abc
asdg
llllllll
wwwww
zhou@zhou:~/LinuxC/file/test$
然后我想删除除了包含字符串aa外所有的文件,也就是想留下aabb,aaaaaaaa,这两个文件,其他的全部删除
下面是我的命令:
zhou@zhou:~/LinuxC/file/test$ rm `ls | grep -v"aa"`
zhou@zhou:~/LinuxC/file/test$ ls
aaaaaaaa
aabb
zhou@zhou:~/LinuxC/file/test$
所以了,成功了。
简单的解释一下那条命令吧:rm 删除后面指定的文件
`ls | grep -v "aa" ` 记得外面是反引号(反引号的位置就在标准键盘的数字1的左边),
ls:查看当前目录下所有的文件,使用grep命令过滤一下grep -v "aa" 就是找出字符串中不带“aa”的。
整体再顺一下:列出文件名不带“aa”串的文件,然后删除他们。OK。
其实说起来简单,当时我也做了好长时间,因为以前没怎么接触grep,因此一开始我想到的办法是使用正则表
达式,但是在做的过程中突然发现了grep使个不错的东西,因此就使用了。
上面的命令使删除带有“aa”串的文件,那如果我只想留下文件aa呢?很简单
zhou@zhou:~/LinuxC/file/test$rm `ls | grep -v"^aa$" `
在aa前面加上^,后面加上$表示结束符的意思,这个就是完全匹配了。
好了,就这么多。但愿以后能用到这个有用的命令
转自:http://blog.sina.com.cn/s/blog_67e34ceb01014930.html
linux 删除其他文件
http://zhidao.baidu.com/link?url=uvHfrb3kSnM_8p5ILhZyc39U0h3md-Ncrm3iaygeYTLU-zjthNBlqO674VulVGTnPiNcl2nj7wo5vn08N4481_
求教 linux centos我想删除某目录中文件名不符合"*20100330*"这样规则的文件应该怎么删除?
使用ls命令仅仅显示当前目录不包括.的文件.
ls加grep过滤的方式:ls -al | grep -v '\.'(ls --ignore=.* -al也可实现)。
在打开extglob模式下(缺省是打开的),ls也可以实现,而且更加灵活.
shopt -u extglob #关闭
shopt -s extglob #打开
ls -al !(*.*)
ls -al -d !(*.*)