如何解决Bash:如何从 for 循环中的多个文件的数组中删除目录的第一部分?
dots=(
~/.config/alacritty
~/.config/dunst
~/.config/flameshot
~/.config/i3
~/.config/i3status
~/.config/kitty
~/.config/nvim
~/.config/picom
~/.config/rofi
~/.config/gtk-3.0
~/.config/obs-studio
~/.config/sway
~/.config/waybar
~/.config/swappy
~/.config/mako
~/.config/swaylock
~/.config/Code/User/settings.json
~/.config/Code/User/keybindings.json
~/.config/fontconfig
~/.bash_logout
~/.bash_profile
~/.bashrc
~/.profile
~/.stignore
~/.gtkrc-2.0
)
for name in "${dots[@]}"; do
if [ ! -e "$name" ]; then
echo "$name does not exist."
ln -sv "$HOME/Dotfiles/dots/${name#~/.config/}" "$name"
else
echo "$name exists."
fi
done
这里的问题是它从 ~/.config/
之类的目录中删除了 ~/.config/sway
部分,但它没有删除 ~/
之类的目录中的 ~/.profile
部分。>
我的问题是,我将如何删除包含它们的文件的 ~/.config/
部分和 ~/
部分?
编辑:将符号链接行中的 echo
替换为 ln -sv
。我用 echo
替换它,以便我可以测试它是否有效。
解决方法
我的问题是,如何删除 ~/.config/ 部分和包含它们的文件的 ~/ 部分?
就个人而言,我会分两步完成,将中间结果存储在单独的变量中:
WITH duplicated AS (
SELECT id,count(*)
FROM products
GROUP BY id
HAVING count(*) > 1),ordered AS (
SELECT p.id,created_at,rank() OVER (partition BY p.id ORDER BY p.created_at) AS rnk
FROM products o
JOIN duplicated d ON d.id = p.id ),products_to_delete AS (
SELECT id,created_at
FROM ordered
WHERE rnk = 2
)
DELETE
FROM products
USING products_to_delete
WHERE products.id = products_to_delete.id
AND products.created_at = products_to_delete.created_at;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。