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

原创
2021/09/29 18:55
阅读数 536

导读

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

例如如下真是用户案例:

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

实验

例如我们有test/a.txt b.txt c.txt d.txt e.txttest/config/setting.ini这些配置文件,都有不同的作用。

假设我们需要保留test/c.txttest/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");

本文同步分享在 博客“手撕代码八百里”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部