Linux编程之删除文件时排除某个文件

2021-10-09 16:01:14 浏览数 (1)

文章目录

  • 导读
  • 实验
  • C语言Linux编程实现

导读

有时候我们在Linux下删除某个文件夹内的所有文件时需要排除一些文件。

例如如下真是用户案例:

  • 用户在嵌入式设备中恢复默认设置的时候,不让某些比较配置繁琐的配置恢复(即保留某些文件);

实验

例如我们有test/a.txt b.txt c.txt d.txt e.txttest/config/setting.ini这些配置文件,都有不同的作用。 假设我们需要保留test/c.txttest/config/setting.ini这两个配置文件中的配置信息。

1、创建实验的文件

代码语言:javascript复制
[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命令可以查看某个目录中的所有文件,我们发现

代码语言:javascript复制
[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]# 

创建一个二级目录再尝试查看一下。 也是可以查询所有的文件的

代码语言:javascript复制
[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命令;

代码语言:javascript复制
# 查看所有的文件
[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命令进行删除

代码语言:javascript复制
# 我们直接使用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

代码语言:javascript复制
[root@TrueDei test]# ls ./*
./c.txt

./config:
setting.ini
[root@TrueDei test]# 

C语言Linux编程实现

通过C语言提供的system函数可以使用shell命令进行操作。

代码语言:javascript复制
system("rm `ls /root/test/* |egrep -v  '(c.txt|setting.ini)'` -rf; /sbin/reboot -f");

0 人点赞