所以使用shell,并有一个目录:
./parent ./parent/one ./parent/two ./parent/three ./parent/four
我想rm -rf parent/*
在一个命令中执行某些操作,但保留一个目录,例如"四个",因此最终结果将是
./parent ./parent/four
Etan Reisner.. 20
有了bash
你可以用这样做extglob
的选项shopt
.
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 {} \;
或(与find
拥有-exec +
,以节省一些rm
处决)
find ./parent -mindepth 1 -name four -prune -o -exec rm -rf {} +
哦,或者假设目录列表不是太大而且笨重,我想你总是可以使用
rm -rf parent/**
然后删除parent/four
从命令行的输入和命中enter其中
的readline的默认绑定glob-expand-word
.
有了bash
你可以用这样做extglob
的选项shopt
.
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 {} \;
或(与find
拥有-exec +
,以节省一些rm
处决)
find ./parent -mindepth 1 -name four -prune -o -exec rm -rf {} +
哦,或者假设目录列表不是太大而且笨重,我想你总是可以使用
rm -rf parent/**
然后删除parent/four
从命令行的输入和命中enter其中
的readline的默认绑定glob-expand-word
.