加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – 删除除一个以外的所有目录

发布时间:2020-12-15 22:51:10 所属栏目:安全 来源:网络整理
导读:所以使用 shell,并有一个目录: ./parent./parent/one./parent/two./parent/three./parent/four 我想在一个命令中执行类似rm -rf parent / *的操作,但保留一个目录,例如’four’,因此最终结果将是 ./parent./parent/four 解决方法 使用bash,您可以使用shopg
所以使用 shell,并有一个目录:

./parent
./parent/one
./parent/two
./parent/three
./parent/four

我想在一个命令中执行类似rm -rf parent / *的操作,但保留一个目录,例如’four’,因此最终结果将是

./parent
./parent/four

解决方法

使用bash,您可以使用shopg的extglob选项执行此操作.

shopt -s extglob
cd parent
rm -rf !(four)

使用posix shell我认为你可以使用循环来做到这一点

for dir in ./parent/*; do
    [ "$dir" = "four" ] && continue
    rm -rf "$dir"
done

或使用数组只运行一次rm(但它需要数组或使用“$@”)

arr=()
for dir in ./parent/*; do
    [ "$dir" = "four" ] && continue
    arr+=("$dir")
done
rm -rf "${arr[@]}"

要么

for dir in ./parent/*; do
    [ "$dir" = "four" ] && continue
    set -- "$@" "$dir"
done
rm -rf "$@"

或者你可以使用find

find ./parent -mindepth 1 -name four -prune -o -exec rm -rf {} ;

或者(使用-exec来保存某些rm执行的find)

find ./parent -mindepth 1 -name four -prune -o -exec rm -rf {} +

哦,或者假设目录列表不是太大而且笨重,我想你总是可以使用

rm -rf parent/*<ctrl-x>*

然后从命令行中删除parent / 4条目并按Enter键,其中< ctrl-x> *是readline的glob-expand-word的默认绑定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读