linux的cp命令的交互式用法和强制覆盖用法的问题(2)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux的cp命令的交互式用法和强制覆盖用法的问题(2)相关的知识,希望对你有一定的参考价值。

其实我已经就这个问题提问一次了(见http://zhidao.baidu.com/question/278464818.html),但是那次后来忘记补充一个重要细节了。这里再提问一次吧:
linux下,cp命令复制一个文件时,
如果目标文件已经存在,则给出提示,询问是否要覆盖。我知道有个选项是 -i
如果要强制覆盖,则使用 -f
现在想要这样的效果:如果目标文件已经存在,则默认会给出提示;但是如果加上了一个选项,例如-f,则不给出提示了。

根据我的试验,在fedora7中,命令: cp -i -f srcfile dstfile ,如果目标文件存在,还是会提示。也就是说-f会被忽略。
可是在redhat9中,同样的命令 cp -i -f srcfile dstfile ,如果目标文件存在,不会提示,而是强制覆盖了。
已经用alias查看cp命令了,没有附加别的选项。

也就是说cp命令在redhat9和fedora7中的行为是不同的。
就我提问的目标来说,其实是想要这样的效果:一般cp命令,为了谨慎起见,都会默认使用alias加上 -i 选项的。这样平时的cp,都是有 -i 选项存在了,如果目标文件存在,都会给出提示。可是有时候我已经明确知道了目标文件存在了,想要覆盖它。那么显然我就想直接用 cp -f srcfile dstfile 。(注意此时由于alias的效果,实际命令成为了 cp -i -f srcfile dstfile )。
于是在redhat9中,我就很爽快地得到了我想要的效果:目标文件直接被覆盖。可是在fedora7中,却还是很麻烦的给出提示!这个让人很恼火!我知道可以去掉alias对cp增加的 -i 选项,可是不想这样做,因为平时还是希望能够给出提示的。

希望有谁能比较清楚这其中的细节差别?而不是简单告诉我自己去查coreutils包版本或者源代码,这个我自己也可以做,可是一来不熟,而来看英文不快。所以还求达人指教!

默认root环境下执行 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'
alias sudo='sudo -E'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

但是普通用户没这个,如果你在root用户下不想交互式可以用绝对命令

\\cp  \\mv   像这样命令前加个‘\\’就好了

参考技术A 一个命令,能用就可以了。 参考技术B 用mv命令就能实现覆盖,
mv file /dst/file 会把dst文件夹下的file覆盖,如果dst下没有file文件,就复制。本回答被提问者采纳
参考技术C ...........还有你可以命令你的手指直接去按电源按钮或者重启按钮
另外,站长团上有产品团购,便宜有保证
参考技术D 不知道是你用的版本比较低还是怎么的,我没碰到过这些问题。我一般都用cp -rf xx xxx, 碰到文件夹也不会再问

linux命令cp

1. 作用

复制文件或目录,创建链接文件(即快捷方式),对比两文件的新旧而予以更新。

2. 用法

cp 【参数】【源文件】【目标文件】

参数:

-a:相当于-pdr;

-b:覆盖已存在的目标文件前将目标文件备份;

-d:若源文件为软链接(符号链接)文件,则复制链接文件而非文件本身;

-f:为强制(force)的意思,若目标文件已经存在,则删除后再复制一次;

-i:若目标文件已经存在,在覆盖时会先询问是否允许覆盖;

-l:若源文件为硬链接(hard link)文件,则创建硬链接文件的硬链接;

-p:连同文件属性一起复制,而非使用默认属性;

-r:递归持续复制,用于目录的复制;

-s:复制成为符号链接文件(symbolic link),即快捷方式;

-u:若目标文件比源文件旧,则更新目标文件;

注:若源文件有两个以上,则目标文件必须得是目录。

3. 范例

3.1 cp -b a.txt test/

覆盖已存在的目标文件前将目标文件备份,末尾加~;

3.2 cp -d soft.link ../dir/

若源文件为软链接(符号链接)文件,则复制链接文件而非文件本身;

硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块;

软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。

:复制软链接文件不带参数-d时,则直接复制的链接指向的原文件。

3.3 cp -f a.txt ../dir/

为强制(force)的意思,若目标文件已经存在,则删除后再复制一次;

注:与不带参数时复制效果一样。

3.4 cp -i a.txt ../dir/

若目标文件已经存在,在覆盖时会先询问是否允许覆盖;

注:与不带参数时复制效果一样,与带参数-f时复制效果一样。

3.5 cp -l hard.link  ../dir/hard.link2

若源文件为硬链接(hard link)文件,则创建硬链接文件的硬链接;

可以看到a.txt、hard.link、hard.link2的inode号码是一样的,hard.link是a.txt的硬链接,hard.link2是hard.link的硬链接。硬链接文件的inode 都指向同一个文件在硬盘中的区块。

3.6 cp -p a.txt ../dir/

连同文件属性一起复制,而非使用默认属性;

3.7 cp -r test/ dir/

递归持续复制,用于目录的复制;

注:目标目录dir文件夹存在时,则复制源文件夹及其内容;目标目录dir1文件夹不存在时,则只复制源文件夹的内容。

注:源文件夹和目标文件夹带不带/,复制效果一样。

3.8 cp -s a.txt soft.link

复制成为符号链接文件(symbolic link),即快捷方式;

注:目标文件目录只能是当前目录,子目录也不行。

3.9 cp -u a.txt ../dir/

若目标文件比源文件旧,则更新目标文件;

注:与不带参数复制效果一样。

 

以上是关于linux的cp命令的交互式用法和强制覆盖用法的问题(2)的主要内容,如果未能解决你的问题,请参考以下文章

文件操作:mv 和cp命令用法

Linux初识二

解决Linux CentOS中cp -f 复制强制覆盖的命令无效的方法

Linux 使用 cp 命令强制覆盖功能

Linux命令:cp

linux 如何不用判断强制cp(复制粘贴覆盖)/bin/cp