有时候我们在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、执行测试命令 我们可以分步骤进行
直接通过
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语言提供的
system
函数可以使用shell命令进行操作。
system("rm `ls /root/test/* |egrep -v '(c.txt|setting.ini)'` -rf; /sbin/reboot -f");