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

本文介绍了如何在Linux环境中使用命令行工具排除特定文件进行删除,并提供了C语言编程实现这一功能的方法。通过ls、find、grep和egrep命令结合rm进行操作,以及利用system函数在C语言中执行shell命令来实现自动化删除。

导读

有时候我们在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");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手撕代码八百里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值