删除文件夹下除了某个文件之外的所有文件或文件夹,结合使用grep和xargs来处理文件名。
案例一:
删除/var/log/
目录中历史的messages
日志文件,只保留最新一版的文件内容。
[root@localhost ~]# ll /var/log/ |grep messages
-rw-r--r--. 1 root root 0 3月 7 07:00 messages
-rw-r--r--. 1 root root 0 3月 7 07:00 messages-20240126
-rw-r--r--. 1 root root 0 3月 7 07:00 messages-20240223
-rw-r--r--. 1 root root 0 3月 7 07:00 messages-20240305
[root@localhost ~]# ll /var/log/ |grep messages-
-rw-r--r--. 1 root root 0 3月 7 07:00 messages-20240126
-rw-r--r--. 1 root root 0 3月 7 07:00 messages-20240223
-rw-r--r--. 1 root root 0 3月 7 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 3月 7 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
命令代替ls
,find
命令取的是文件的绝对路径无需cd
到目录