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)的主要内容,如果未能解决你的问题,请参考以下文章