mv!(old-project)old-project有什么作用?

时间:2019-08-13 09:07:42

标签: bash shell

我正在阅读此博客帖子https://www.nomachetejuggling.com/2011/09/12/moving-one-git-repo-into-another-as-subdirectory/,作者使用命令mv !(old-project) old-project

它是做什么的?

我的猜测是,它将old-project子文件夹本身之外的所有内容old-project复制到old-project子文件夹中。它是如何做到的?

1 个答案:

答案 0 :(得分:0)

Bash根据filename expansion中的规则执行pattern matching!(old-project)匹配除old-project之外的所有内容。

!(pattern-list)

    Matches anything except one of the given patterns. 

如果old-project存在并且是目录,并且在当前工作目录中有其他文件或文件夹或其他文件,则其他名称为old-project:然后mv !(old-project) old-project移动当前文件中的所有文件和目录当前工作目录old-project文件夹中的工作目录。

角落案例:

  • 如果old-project不存在,mv将失败,并显示mv: target 'old-project' is not a directory

  • 如果old-project存在并且不是目录(也不是指向目录的符号链接等),则mv将失败,并与上述错误相同。

  • 如果当前工作目录中除old-project之外没有文件,目录等,或者old-project也丢失,则mv将失败,{{1 }},因为mv: cannot stat '!(old-project)': No such file or directory不会扩展。

基本上,!(old-project)会扩展到!(old-project)以外的所有内容。在终端中,我经常只是执行old-project并观察mv * old-project失败,并显示“无法将相同目录移动到自身”错误。在脚本中使用mv是替代方法。

请注意,要使!(old-project)在bash中工作,必须使用内置的!(pattern-list)启用extglob shell选项。