Linux中删除指定文件以外的其他所有文件

删除文件夹下除了某个文件之外的所有文件或文件夹,结合使用grep和xargs来处理文件名。

案例一:

删除/var/log/目录中历史的messages日志文件,只保留最新一版的文件内容。

[root@localhost ~]# ll /var/log/ |grep messages
-rw-r--r--. 1 root root 0 37 07:00 messages
-rw-r--r--. 1 root root 0 37 07:00 messages-20240126
-rw-r--r--. 1 root root 0 37 07:00 messages-20240223
-rw-r--r--. 1 root root 0 37 07:00 messages-20240305
[root@localhost ~]# ll /var/log/ |grep messages-
-rw-r--r--. 1 root root 0 37 07:00 messages-20240126
-rw-r--r--. 1 root root 0 37 07:00 messages-20240223
-rw-r--r--. 1 root root 0 37 07:00 messages-20240305
[root@localhost ~]# cd /var/log/
[root@localhost log]# ls /var/log/ |grep "messages-" |xargs rm -f
[root@localhost log]# ll /var/log/ |grep messages
-rw-r--r--. 1 root root 0 37 07:00 messages
[root@localhost log]#

xargs用于从标准输入获得参数 并且传递给后面的命令,这里使用的命令是rm,然后由rm删除前面选择的文件。

注意

  • 必须到/var/log/本地目录下通过rm命令删除当前文件夹中的文件,不能通过ls /var/log/ |grep "messages-" |xargs rm -f /var/log/来删除文件,会直接删除rm -f /var/log/
  • rm命令要谨慎操作

案例二:

删除/var/log/目录中历史的messages日志文件,只保留最新一版的文件内容。

[root@localhost log]# find /var/log/ -name "messages*"
/var/log/messages
/var/log/messages-20240126
/var/log/messages-20240223
/var/log/messages-20240305
[root@localhost log]# find /var/log/ -name "messages*" |grep -xv "/var/log/messages"
/var/log/messages-20240126
/var/log/messages-20240223
/var/log/messages-20240305
[root@localhost log]# find /var/log/ -name "messages*" |grep -xv "/var/log/messages" |xargs rm -f
[root@localhost log]# find /var/log/ -name "messages*"
/var/log/messages
  • grep -vx:其中-v是反选 显示不匹配的行,-x匹配整行
  • 使用find命令代替lsfind命令取的是文件的绝对路径无需cd到目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值