summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbh <qn+git@epicurus.dev>2026-03-31 12:50:16 +0800
committerbh <qn+git@epicurus.dev>2026-03-31 12:50:16 +0800
commit978d4116ec19b7e43d99f227109cb25289ee311f (patch)
tree60266b7f45c394dd5c724b7495b7371906afc3bb
parente6e212e7e595df845ff3cfa9818f2cff28812a33 (diff)
zsh: fix take function
-rw-r--r--zsh/.zshrc7
1 files changed, 6 insertions, 1 deletions
diff --git a/zsh/.zshrc b/zsh/.zshrc
index c9f5cbc..2d3f55f 100644
--- a/zsh/.zshrc
+++ b/zsh/.zshrc
@@ -100,7 +100,12 @@ takedir() {
elif [[ $# -ge 2 ]]; then
local dest="${@:$#}"
mkdir -p "$dest"
- mv "${@:1:$#-1}" "$dest"
+ local abs_dest srcs=() src
+ abs_dest=$(realpath "$dest")
+ for src in "${@:1:$#-1}"; do
+ [[ "$(realpath "$src" 2>/dev/null)" != "$abs_dest" ]] && srcs+=("$src")
+ done
+ [[ ${#srcs[@]} -gt 0 ]] && mv "${srcs[@]}" "$dest"
cd "$dest"
else
echo "usage: take <dir> OR take <sources...> <destdir>"