linux环境中,一个目录下,除了特定的目录和这个目录里面的内容,删除所有其他的目录和文件的方法
有个tomcat目录,如下:
[root@nccztsjb-node-27 apache-tomcat-9.0.75]# ls -l
total 148
drwxr-x--- 2 root root 4096 Jul 20 14:37 bin
-rw-r----- 1 root root 19992 May 4 21:04 BUILDING.txt
drwx------ 2 root root 4096 May 4 21:04 conf
-rw-r----- 1 root root 6210 May 4 21:04 CONTRIBUTING.md
drwxr-x--- 2 root root 4096 Jul 20 14:37 lib
-rw-r----- 1 root root 57092 May 4 21:04 LICENSE
drwxr-x--- 2 root root 4096 May 4 21:04 logs
-rw-r----- 1 root root 2333 May 4 21:04 NOTICE
-rw-r----- 1 root root 3398 May 4 21:04 README.md
-rw-r----- 1 root root 6901 May 4 21:04 RELEASE-NOTES
-rw-r----- 1 root root 16505 May 4 21:04 RUNNING.txt
drwxr-x--- 2 root root 4096 Jul 20 14:37 temp
drwxr-x--- 7 root root 4096 May 4 21:04 webapps
drwxr-x--- 2 root root 4096 May 4 21:04 work
[root@nccztsjb-node-27 apache-tomcat-9.0.75]#
除了webapps和这个目录下的内容,其他的文件都进行删除
方法如下,使用find命令
cd /root/apache-tomcat-9.0.75 find . -mindepth 1 ! -path "./webapps/*" ! -path "./webapps" -exec rm -rf {} +
结果,webapps目录,目录下面的东西,都有,其他的东西,都被删除掉了。
命令解释:
find: 查找命令。
.: 表示当前目录,你可以将其替换为目标目录的绝对路径。
-mindepth 1: 确保find不会匹配到当前目录本身,只匹配子目录和文件。
! -path "./特定目录/*": 表示不匹配名为"特定目录"的目录以及其内容。!表示否定。
-exec: 在找到的文件/目录上执行后面的命令。
rm -rf {} +: 删除找到的文件/目录。{}会被find命令替换为实际的文件名/目录名。
+: 一次性执行尽可能多的删除操作,而不是每找到一个文件/目录就执行一次。