bash移动隐藏文件,重置dotglob?

kre*_*tas 6 bash dot-files mv

我想移动所有文件,包括从点(隐藏)和文件夹(递归)开始。

所以我使用了以下命令

shopt -s dotglob nullglob
mv ~/public/* ~/public_html/
Run Code Online (Sandbox Code Playgroud)

它起作用了。

但完成后我需要重置任何东西吗shopt -s dotglob nullglob?它不会改变命令的mv操作方式吗?因为我希望它改回来。

Kus*_*nda 6

shopt -u nullglob dotglob是的,如果您希望在当前 shell 中恢复默认的通配行为,则必须随后取消设置这些选项(使用)。

你可以这样做

mv ~/public/* ~/public/.* ~/public_html/
Run Code Online (Sandbox Code Playgroud)

显然,如果其中一个模式与任何内容都不匹配,那么在未设置的情况下仍然会生成错误nullglob,但无需设置任一选项即可工作。它可能还会说一些有关重命名失败的信息,.因为它是一个目录,但这也不能阻止它移动文件。

更好的选择可能是在本地使用rsync

rsync -av ~/public/ ~/public_html/
Run Code Online (Sandbox Code Playgroud)

然后删除~/public


Jef*_*ler 5

只需取消它们:

shopt -u dotglob nullglob
Run Code Online (Sandbox Code Playgroud)

don_crissti 提出了一个很好的观点,我将详细阐述。从问题中不清楚在运行设置它们之前是否已经设置了dotglobshopt -s或 nullglob 。因此,盲目地取消设置它们可能不是正确的重置方法。在子 shell 中设置它们将使当前 shell 的设置保持不变:

( shopt -s dotglob nullglob; mv ~/public/* ~/public_html/ )
Run Code Online (Sandbox Code Playgroud)