Linux系统利用cp命令实现强制覆盖功能的方法
<p><span><strong>前言</strong></span></p>
<p>
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。</p>
<p>
<span><strong>语法</strong></span></p>
<p>
cp(选项)(参数)</p>
<p>
选项</p>
<ul>
<li>
-a:此参数的效果和同时指定"-dpR"参数相同;</li>
<li>
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;</li>
<li>
-f:强行复制文件或目录,不论目标文件或目录是否已存在;</li>
<li>
-i:覆盖既有文件之前先询问用户;</li>
<li>
-l:对源文件建立硬连接,而非复制文件;</li>
<li>
-p:保留源文件或目录的属性;</li>
<li>
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;</li>
<li>
-s:对源文件建立符号连接,而非复制文件;</li>
<li>
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;</li>
<li>
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;</li>
<li>
-b:覆盖已存在的文件目标前将目标文件备份;</li>
<li>
-v:详细显示命令执行的操作。</li>
</ul>
<p>
<span><strong>参数</strong></span></p>
<p>
源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;</p>
<p>
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。</p>
<p>
<span><strong>利用cp命令实现强制覆盖功能</strong></span></p>
<p>
我们平常在Linux中使用 cp 命令时,会发现将一个目录中文件复制到另一个目录具有相同文件名称时,即使添加了 -rf 参数强制覆盖复制时,系统仍然会提示让你一个个的手工输入 y 确认复制,所添加的rf参数是不起作用的。</p>
<p>
<strong>原因: </strong></p>
<p>
cp命令被系统设置了别名,相当于<code>cp=‘cp -i'</code> 。</p>
<p>
<strong>查询alias命令</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_521690">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments"># alias </code>
</div>
<div class="line number2 index1 alt1">
<code class="bash functions">alias</code> <code class="bash functions">cp</code><code class="bash plain">=</code><code class="bash string">'cp -i'</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash functions">alias</code> <code class="bash functions">egrep</code><code class="bash plain">=</code><code class="bash string">'egrep --color=auto'</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash functions">alias</code> <code class="bash functions">fgrep</code><code class="bash plain">=</code><code class="bash string">'fgrep --color=auto'</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash functions">alias</code> <code class="bash functions">grep</code><code class="bash plain">=</code><code class="bash string">'grep --color=auto'</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash functions">alias</code> <code class="bash plain">l.=</code><code class="bash string">'ls -d .* --color=auto'</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash functions">alias</code> <code class="bash plain">ll=</code><code class="bash string">'ls -l --color=auto'</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash functions">alias</code> <code class="bash functions">ls</code><code class="bash plain">=</code><code class="bash string">'ls --color=auto'</code>
</div>
<div class="line number9 index8 alt2">
<code class="bash functions">alias</code> <code class="bash functions">mv</code><code class="bash plain">=</code><code class="bash string">'mv -i'</code>
</div>
<div class="line number10 index9 alt1">
<code class="bash functions">alias</code> <code class="bash functions">rm</code><code class="bash plain">=</code><code class="bash string">'rm -i'</code>
</div>
<div class="line number11 index10 alt2">
<code class="bash functions">alias</code> <code class="bash functions">which</code><code class="bash plain">=</code><code class="bash string">'alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
通过上述输出,可以看出,我们平时使用 cp 命令,虽然没有添加任何参数 ,但系统默认会在我们使用 cp 命令时自动添加 -i 参数</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterplain" id="highlighter_262184">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="plain plain">-i, --interactive</code>
</div>
<div class="line number2 index1 alt1">
<code class="plain spaces"> </code><code class="plain plain">prompt before overwrite</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
-i 即交互的缩写方式,也就是在使用 cp 命令作文件覆盖操作之前,系统会要求确认提示.这个本来是系统的一个保险措施.如果有很多文件要复制,觉得一个一个输入y 确认麻烦的话,可以使用如下方法解决:</p>
<p>
<span><strong>强制复制</strong></span></p>
<p>
建议大家使用方式一,因为取消别名的话很容易造成风险,万一又忘记恢复别名,以后的复制都不会有提示信息。<br>
有提示信息可以多一层保险嘛,是人都会有犯混的时候,给自己加一个保险,有保障呀.</p>
<p>
<strong>方式一</strong></p>
<p>
使用原生的cp命令</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_774904">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">/bin/cp</code> <code class="bash plain">-rf xxxx</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>方式二</strong></p>
<p>
取消cp命令别名</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_95412">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">unalias</code> <code class="bash functions">cp</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
去掉 cp 命令的别名,这时你再用 cp -rf 复制文件时,就不会要求确认啦.</p>
<p>
复制完成后恢复别名</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_363122">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">alias</code> <code class="bash functions">cp</code><code class="bash plain">=</code><code class="bash string">'cp -i'</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<span><strong>总结</strong></span></p>
<p>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
原文链接:http://blog.csdn.net/xinluke/article/details/52229431</p>
頁:
[1]