在linux机器上clone了一份代码,需要将代码cp复制到另外一个目录下。
因为复制的时候,只需要代码,不需要.git文件夹,所以第一次使用cp -r命令,直接复制过去,发现正好不不会复制.git文件,以为完美。。。
cp -r /aaa/* /bbb/
然后复制过去后发现了问题,因为代码库根目录下的文件,也有是以点[.]开头的,比如前端工程的.babelrc文件。linux认为点开头的为隐藏文件,所以在使用cp -r的时候.babelrc文件也被忽略了,这显然不是想要的结果;
查询资料找到解决方案,可以将隐藏文件也一同复制过去,使用 cp -a /aaa/. /bbb/,在/aaa/后面添加一个点.
cp -a /aaa/. /bbb/
但是还有一个问题就是,这样是把所有文件都复制过去了,包括我们不需要.git文件,所有要单独处理下.git文件,删除一下
rm -rf .git/
最后,贴一下cp 的参数:
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。 -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。 -f:覆盖已经存在的目标文件而不给出提示。 -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。 -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。 -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。 -l:不复制文件,只是生成链接文件。