假设以下目录结构:
workspace
|-- cleanup.sh
|-- node_modules
|-- job1
|---- testResults
|---- some other folder
|---- some file
|---- some file
|-- job2
|---- ...
我怎么能:
换句话说:保持目录结构不变,但删除除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
答案 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