前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux编程之删除文件时排除某个文件

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

作者头像
手撕代码八百里
发布2021-10-09 16:01:14
2.1K0
发布2021-10-09 16:01:14
举报
文章被收录于专栏:猿计划

文章目录

导读

有时候我们在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");
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 导读
  • 实验
  • C语言Linux编程实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档