cp 命令有坑
cp 是个很常用的命令,
基本语法为 cp -v a b 把文件a 复制为文件b(-v为显示做了什么,这是非常安全的做法,建议新手添加此参数)
参数说明:
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于-dR 或者 --preserve=all
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。(一般情况下系统别名已自动添加此参数)
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,而是生成 硬链接
-s :不复制文件,而是生成 软链接
-v: 显示cp指令做了什么
场景:cp -v a b 把文件a拷贝为文件b,两者相似而不相同
坑1: b为已存在目录时, a会被复制到 目录b下(新手会出现的)
正确指令:
想复制文件本身时: cp -T a b (b与a不是相同属性时会报错而且复制不了)
想复制到目标目录下时: cp a b/ (b为非目录时会报错)
坑2: a 为软连接的情况下, 复制后的文件会是a所连接文件的拷贝
坑3: 基于坑2, cp -r 时, 复制后的文件也会是软连接,指向目录也会相同(不过基本上都是失效)
正确指令:
想复制结果也是软连接时: cp -sr a b 或 cp -s a b
想复制结果为软连接的目标时:cp -Lr a b 或 cp -L a b
坑4:cp -l 千万不要用这个参数,因为这个是硬连接!!!