4
所以使用外殼,並具有目錄:刪除所有目錄,除了一個
./parent
./parent/one
./parent/two
./parent/three
./parent/four
我想這樣做rm -rf parent/*
在一個命令,但保持一個目錄,比如「四」,所以最終結果將是
./parent
./parent/four
所以使用外殼,並具有目錄:刪除所有目錄,除了一個
./parent
./parent/one
./parent/two
./parent/three
./parent/four
我想這樣做rm -rf parent/*
在一個命令,但保持一個目錄,比如「四」,所以最終結果將是
./parent
./parent/four
隨着bash
您可以用shopt
的extglob
選項做到這一點。
shopt -s extglob
cd parent
rm -rf !(four)
在POSIX殼我想你使用一個循環做到這一點
for dir in ./parent/*; do
[ "$dir" = "four" ] && continue
rm -rf "$dir"
done
或使用數組來運行rm
只有一次(但它需要陣列或使用"[email protected]"
)
arr=()
for dir in ./parent/*; do
[ "$dir" = "four" ] && continue
arr+=("$dir")
done
rm -rf "${arr[@]}"
或
for dir in ./parent/*; do
[ "$dir" = "four" ] && continue
set -- "[email protected]" "$dir"
done
rm -rf "[email protected]"
或者你使用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/*<ctrl-x>*
then de從命令行中輸入parent/four
條目,並點擊輸入,其中<ctrl-x>*
是glob-expand-word
的readline的默認綁定。
優秀的答案。我通常只是'mv'目錄並刪除其他所有內容。 ;)+1 – erip
@erip嘿,是的,在許多情況下,這當然是一個更容易的途徑。雖然'extglob'幾乎是一樣簡單。 –
小心!寫出來的'find'也會匹配'。/ parent'! – pilcrow