导读
有时候我们在Linux下删除某个文件夹内的所有文件时需要排除一些文件。
例如如下真是用户案例:
- 用户在嵌入式设备中恢复默认设置的时候,不让某些比较配置繁琐的配置恢复(即保留某些文件);
实验
例如我们有
test/a.txt b.txt c.txt d.txt e.txt
和test/config/setting.ini
这些配置文件,都有不同的作用。假设我们需要保留
test/c.txt
和test/config/setting.ini
这两个配置文件中的配置信息。
1、创建实验的文件
[root@TrueDei test]# touch a.txt b.txt c.txt d.txt e.txt [root@TrueDei test]# [root@TrueDei test]# ls a.txt b.txt c.txt d.txt e.txt [root@TrueDei test]#
2、执行测试命令
我们可以分步骤进行
- 1、先查询出来排出后的所有文件
- 2、按照查询的结果进行删除
直接通过
ls
或者find
命令可以查看某个目录中的所有文件,我们发现
[root@TrueDei test]# ls ./* ./a.txt ./b.txt ./c.txt ./d.txt ./e.txt [root@TrueDei test]# [root@TrueDei test]# find ./* ./a.txt ./b.txt ./c.txt ./d.txt ./e.txt [root@TrueDei test]#
创建一个二级目录再尝试查看一下。
也是可以查询所有的文件的
[root@TrueDei test]# mkdir config [root@TrueDei test]# touch config/setting.ini [root@TrueDei test]# [root@TrueDei test]# find ./* ./a.txt ./b.txt ./config ./config/setting.ini ./c.txt ./d.txt ./e.txt [root@TrueDei test]# [root@TrueDei test]# ls ./* ./a.txt ./b.txt ./c.txt ./d.txt ./e.txt ./config: setting.ini [root@TrueDei test]#
查询并排除我们想排除的文件
grep
命令,应该很常用,可以过滤出来我们想要的数据。如果需要排除我们不想要的数据的话,Linux也提供了一个
egrep
命令;
# 查看所有的文件 [root@TrueDei test]# ls ./* ./a.txt ./b.txt ./c.txt ./d.txt ./e.txt ./config: setting.ini [root@TrueDei test]# # 排除setting.ini文件 [root@TrueDei test]# ls ./* |egrep -v '(setting.ini)' ./a.txt ./b.txt ./c.txt ./d.txt ./e.txt ./config: [root@TrueDei test]# [root@TrueDei test]# # 排除c.txt和setting.ini文件 [root@TrueDei test]# ls ./* |egrep -v '(c.txt|setting.ini)' ./a.txt ./b.txt ./d.txt ./e.txt ./config: [root@TrueDei test]# [root@TrueDei test]#
配合
rm
命令进行删除
# 我们直接使用rm命令是有时候还询问是否删除等信息。在代码中就不好操作了。很烦人的 [root@TrueDei test]# rm `ls ./* |egrep -v '(c.txt|setting.ini)'` rm: remove regular empty file './a.txt'? y rm: remove regular empty file './b.txt'? ^C # 我们加上-rf即可 [root@TrueDei test]# rm `ls ./* |egrep -v '(c.txt|setting.ini)'` -rf [root@TrueDei test]#
可以看到成功了。
只保留了c.txt和setting.ini
[root@TrueDei test]# ls ./* ./c.txt ./config: setting.ini [root@TrueDei test]#
C语言Linux编程实现
通过C语言提供的
system
函数可以使用shell命令进行操作。
system("rm `ls /root/test/* |egrep -v '(c.txt|setting.ini)'` -rf; /sbin/reboot -f");