如何使用bash保留目录结构但删除其中的一些内容...

时间:2017-03-23 07:44:29

标签: bash

假设以下目录结构:

workspace  
|-- cleanup.sh  
|-- node_modules  
|-- job1  
|---- testResults   
|---- some other folder  
|---- some file  
|---- some file  
|-- job2  
|---- ...

我怎么能:

  • 不删除cleanup.sh,node_modules和子文件夹作业* / testResults
  • 删除“某些文件”和“其他文件夹”

换句话说:保持目录结构不变,但删除除node_module文件夹(完整),testResults子文件夹和cleanup.sh脚本本身之外的所有内容。

到目前为止,我的工作脚本不合适......

shopt -s extglob
for i in ./*
do
   if [ -d $i ]
   then
      if [ "$i" = "./workspace/node_modules" ]
      then
         echo "Inside node_modules. Skipping."
      else
         echo "Inside directory: $i. Deleting and preserving only testResults."
         rm !(testResults|"cleanup.sh")
      fi
   fi
done

2 个答案:

答案 0 :(得分:2)

如果testResults是一个目录,我相信需要@ hek2mgl稍微修改一下该解决方案的版本:

find workspace/job* -mindepth 1 ! -path '*testResults*' -exec rm -r {} +

请注意,我已根据您的说明开始上一级。

您可以使用ls来测试rm将执行的操作:

find workspace/job* -mindepth 1 ! -path '*testResults*' -exec ls -lad {} +

@ hek2mgl:我会对你的评论,但我没有必要的声誉。

答案 1 :(得分:0)

如果您有gnu-find,那么此命令将完成这项工作:

find /path/to/workspace/ -mindepth 1 -regextype posix-extended \
-not -iregex '.*/(testResults(/.*)?|node_modules(/.*)?|cleanup\.sh)$' -delete