linux 为什么GNU Stow不忽略主目录中的单个文件?

w1jd8yoj  于 2023-01-29  发布在  Linux
关注(0)|答案(2)|浏览(148)

我已经添加了一个自述文件到我的dotfile文件夹,因为我用stow管理每个包,我想忽略它。从文档中我读到,默认情况下,stow使用一个包含自述文件的预设列表。现在,这似乎不起作用。我也尝试添加一个.stow-global-ignore,但同样的错误。甚至用stow -nv --ignore='README.md' *强制也没有结果。

$ tree
.
├── i3
├── i3status
├── nvim
├── README.md
├── rofi
├── stow
├── urxvt
└── zsh

$ stow -nv *
LINK: .config/i3/config => ../../.dotfiles/i3/.config/i3/config
LINK: .config/i3status/config => ../../.dotfiles/i3status/.config/i3status/config
LINK: .config/nvim/init.vim => ../../.dotfiles/nvim/.config/nvim/init.vim
stow: ERROR: The stow directory .dotfiles does not contain package README.md

我的猜测是忽略列表只应用于stow目录中的包(因此是dirs)?有什么解决办法吗?

uklbhaso

uklbhaso1#

我刚刚遇到了同样的问题,我发现在通配符*/后面加上斜杠意味着glob只会查找目录,忽略stow的“根”(在我的例子中是dotfiles文件夹)中的所有文件。这忽略了我想要的readme.mdlicense.txt等文件。
我的stow命令变为(从我的dotfiles repo目录中运行)

stow -t ~ */

我不认为stow在根目录下存放文件是有效的,我认为它们需要总是嵌套在一个文件夹中,所以可能这应该是默认的,但是我在这方面有点含糊。如果有从stow根目录存放文件的用例,这个解决方案将不起作用。
这要归功于this post,它让我思考。

ktecyv1j

ktecyv1j2#

编写如下shell脚本

#! /usr/bin/env sh
stow -nv i3 i3status nvim rofi stow urxvt zsh

而不是

stow -nv *


我认为,问题在于stow *中的*匹配包括README.md在内的所有文件?
或者,如果更喜欢拒绝列表,我想您可以使用fdfindexclude特性,并将其传递给--exec。
比如:

fd --exclude README.md -d 1 --exec stow -nv

...... -d 1只包含直接子目录。

相关问题