在项目中有个这样的需求就是在每次编译后将某个文件夹下的文件替换为一个固定文件夹下的文件,如果没有那就直接复制了,但是如果有那就麻烦了,他会一个个问你是否要覆盖,这样是不是很麻烦,下面我们用小demo来学习一下:
1、正常复制命令: cp -rf /www/cms.whd.com/conf/ mycms/
-r 是递归的意思,会把问价下的子文件目录都会复制
-f 参数是强制复制,比如你在a文件中有个文件名叫b,然后你把c文件夹里面的另一个文件名叫做b的复制到a里面,这个时候回冲突,然后会提示你要不要继续复制,加上-f就不会提示你了。
但是当我们执行上面的那个命令时还是会提示你要不要覆盖,这是因为系统中设置了别名:
[root@sjhl-wn-cms01v cms.fang.com]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
一、Linux 复制文件语法
1、 cp [option] src dest
2、 option 可选参数如下:
-a:是指archive的意思,也说是指复制所有的目录
-d:若源文件为连接文件(link file),则复制连接文件属性而非文件本身
-f:强制(force),若有重复或其它疑问时,不会询问用户,而强制复制
-i:若目标文件(destination)已存在,在覆盖时会先询问是否真的操作
-l:建立硬连接(hard link)的连接文件,而非复制文件本身
-p:与文件的属性一起复制,而非使用默认属性
-r:递归复制,用于目录的复制操作
-s:复制成符号连接文件(symbolic link),即“快捷方式”文件
-u:若目标文件比源文件旧,更新目标文件
二、普通文件复制
1、cp Hello.java HelloWorld.java : 将 Hello.java 复制一份名为 HelloWorld.java的文件
2、cp Hello.java /usr/He.java : 将 Hello.java 复制到 /usr/目录下,名称为 He.java
3、cp -rf /usr /root :将 /usr 文件夹复制到 /root 文件夹下。 (会形成: /root/usr 文件夹)
4、cp -rf /usr/** /root :将 /usr 文件夹下的全部文件复制到 /root文件夹下。 (会形成: /root/usr文件夹下的内容)
三、强制覆盖、替换文件
1、语法: \cp src dest : 前面增加 反斜杠“\” , 表示强制覆盖文件。
2、\cp Hello.java World.java : 将 Hello.java 文件强制替换到 World.java下。 (相当于: World.java 删除,Hello.java 文件复制过来,改名 World.java)
3、\cp -rf /usr /root : 将 /usr 文件夹复制到 /root 文件夹下,遇到相同,会强制覆盖掉!
4、\cp -rf /usr/** /root :将 /usr 文件夹下的全部文件复制到 /root 文件夹下,遇到相同,会强制覆盖掉!
如果写在脚本中可以使用下面的方式 $(pwd) 或者 $`pwd` 来获取当前的目录路径
\cp -rf /www/cms.whd.com/conf/ $(pwd)/target/cms.manager/bdp/core/conf/