【rm】删除一个目录中除某个(几个)文件外的其他文件
这个删除的动作偶尔也是会遇到的,删除的方法有很多种,无非是笨点儿或则省事儿点儿而已,以下列出三种方法供参考
方法1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@Yjiu yum.repos.d]# ll total 28 -rw-r--r--. 1 root root 1664 Nov 30 2016 CentOS-Base.repo -rw-r--r--. 1 root root 1309 Nov 30 2016 CentOS-CR.repo -rw-r--r--. 1 root root 649 Nov 30 2016 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 314 Nov 30 2016 CentOS-fasttrack.repo -rw-r--r--. 1 root root 630 Nov 30 2016 CentOS-Media.repo -rw-r--r--. 1 root root 1331 Nov 30 2016 CentOS-Sources.repo -rw-r--r--. 1 root root 2893 Nov 30 2016 CentOS-Vault.repo [root@Yjiu yum.repos.d]# ## 删除,除了CentOS-Media.repo之外的所有文件 [root@Yjiu yum.repos.d]# rm -f !(CentOS-Media.repo) [root@Yjiu yum.repos.d]# ## 验证 [root@Yjiu yum.repos.d]# ll total 4 -rw-r--r--. 1 root root 630 Nov 30 2016 CentOS-Media.repo [root@Yjiu yum.repos.d]# |
以上是保留一个文件,如果保留多个文件呢?(注意,如果括号中的文件名字写错了,那么后果就是,文件全部都删除了)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@Yjiu yum.repos.d.bak]# ll total 28 -rw-r--r-- 1 root root 1664 Sep 26 16:12 CentOS-Base.repo -rw-r--r-- 1 root root 1309 Sep 26 16:12 CentOS-CR.repo -rw-r--r-- 1 root root 649 Sep 26 16:12 CentOS-Debuginfo.repo -rw-r--r-- 1 root root 314 Sep 26 16:12 CentOS-fasttrack.repo -rw-r--r-- 1 root root 558 Sep 26 16:12 CentOS-Media.repo -rw-r--r-- 1 root root 1331 Sep 26 16:12 CentOS-Sources.repo -rw-r--r-- 1 root root 2893 Sep 26 16:12 CentOS-Vault.repo [root@Yjiu yum.repos.d.bak]# [root@Yjiu yum.repos.d.bak]# [root@Yjiu yum.repos.d.bak]# rm -f !(CentOS-Media.repo|CentOS-Base.repo) [root@Yjiu yum.repos.d.bak]# [root@Yjiu yum.repos.d.bak]# ll total 8 -rw-r--r-- 1 root root 1664 Sep 26 16:12 CentOS-Base.repo -rw-r--r-- 1 root root 558 Sep 26 16:12 CentOS-Media.repo [root@Yjiu yum.repos.d.bak]# |
如果是删除目录呢?rm -rf 即可。
方法二:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[root@Yjiu yum.repos.d]# ll total 28 -rw-r--r--. 1 root root 1664 Nov 30 2016 CentOS-Base.repo -rw-r--r--. 1 root root 1309 Nov 30 2016 CentOS-CR.repo -rw-r--r--. 1 root root 649 Nov 30 2016 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 314 Nov 30 2016 CentOS-fasttrack.repo -rw-r--r--. 1 root root 630 Nov 30 2016 CentOS-Media.repo -rw-r--r--. 1 root root 1331 Nov 30 2016 CentOS-Sources.repo -rw-r--r--. 1 root root 2893 Nov 30 2016 CentOS-Vault.repo [root@Yjiu yum.repos.d]# ## grep -v Media ,不包含Media [root@Yjiu yum.repos.d]# ls -l |grep -v Media total 28 -rw-r--r--. 1 root root 1664 Nov 30 2016 CentOS-Base.repo -rw-r--r--. 1 root root 1309 Nov 30 2016 CentOS-CR.repo -rw-r--r--. 1 root root 649 Nov 30 2016 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 314 Nov 30 2016 CentOS-fasttrack.repo -rw-r--r--. 1 root root 1331 Nov 30 2016 CentOS-Sources.repo -rw-r--r--. 1 root root 2893 Nov 30 2016 CentOS-Vault.repo [root@Yjiu yum.repos.d]# ## xargs用过很多次了 [root@Yjiu yum.repos.d]# ls |grep -v Media |xargs rm -f [root@Yjiu yum.repos.d]# [root@Yjiu yum.repos.d]# ls CentOS-Media.repo [root@Yjiu yum.repos.d]# |
方法三:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
## 构造几个文件和目录用于测试 [root@Yjiu yum.repos.d.bak]# touch a.txt b.txt c.txt d.log e.conf [root@Yjiu yum.repos.d.bak]# [root@Yjiu yum.repos.d.bak]# mkdir {adump,bdump,cdump,ddump} [root@Yjiu yum.repos.d.bak]# [root@Yjiu yum.repos.d.bak]# touch init.ORA initORA11GR2.ORA initORCL.ORA [root@Yjiu yum.repos.d.bak]# ## 查看已创建的文件和目录 [root@Yjiu yum.repos.d.bak]# ls -lrt total 0 -rw-r--r-- 1 root root 0 Sep 26 16:24 e.conf -rw-r--r-- 1 root root 0 Sep 26 16:24 d.log -rw-r--r-- 1 root root 0 Sep 26 16:24 c.txt -rw-r--r-- 1 root root 0 Sep 26 16:24 b.txt -rw-r--r-- 1 root root 0 Sep 26 16:24 a.txt drwxr-xr-x 2 root root 6 Sep 26 16:25 adump drwxr-xr-x 2 root root 6 Sep 26 16:25 ddump drwxr-xr-x 2 root root 6 Sep 26 16:25 cdump drwxr-xr-x 2 root root 6 Sep 26 16:25 bdump -rw-r--r-- 1 root root 0 Sep 26 16:25 initORCL.ORA -rw-r--r-- 1 root root 0 Sep 26 16:25 initORA11GR2.ORA -rw-r--r-- 1 root root 0 Sep 26 16:25 init.ORA [root@Yjiu yum.repos.d.bak]# ## 查看文件,利用正则表达式过滤掉不想删除的文件(过滤掉以init开头的文件) [root@Yjiu yum.repos.d.bak]# ls |grep -v ^init adump a.txt bdump b.txt cdump c.txt ddump d.log e.conf [root@Yjiu yum.repos.d.bak]# ## 执行删除,因为删除中包含目录,所以rm时加上参数r [root@Yjiu yum.repos.d.bak]# rm -rf `ls |grep -v ^init` [root@Yjiu yum.repos.d.bak]# ## 确认 [root@Yjiu yum.repos.d.bak]# ls -lrt total 0 -rw-r--r-- 1 root root 0 Sep 26 16:25 initORCL.ORA -rw-r--r-- 1 root root 0 Sep 26 16:25 initORA11GR2.ORA -rw-r--r-- 1 root root 0 Sep 26 16:25 init.ORA [root@Yjiu yum.repos.d.bak]# |
小结:
以上介绍的只是这个需求的三种比较方便且常用的方法,视具体情况而选择自己熟悉的方式。
另:删除是危险,特别是rm -rf *,所以,无论是谁,只要涉及到删除动作,切记要小心。