我想移动所有文件,包括从点(隐藏)和文件夹(递归)开始。
所以我使用了以下命令
shopt -s dotglob nullglob
mv ~/public/* ~/public_html/
Run Code Online (Sandbox Code Playgroud)
它起作用了。
但完成后我需要重置任何东西吗shopt -s dotglob nullglob?它不会改变命令的mv操作方式吗?因为我希望它改回来。
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。
只需取消它们:
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)