Unix复制命令示例[cp命令]

时间:2020-01-09 10:37:50  来源:igfitidea点击:

如何使用ksh或csh或bash shell提示符在Unix操作系统下复制文件?
您需要使用cp命令在Unix之类的操作系统下复制文件和目录。
以下命令和常用选项应适用:

  • IBM AIX

  • 苹果OS X

  • Sun/Oracle Solaris

  • FreeBSD/OpenBSD/NetBSD

  • Linux

  • HP-UX

  • 其他类Unix操作系统。

Unix:cp命令语法

语法为:

cp SOURCE DEST
cp SOURCE DIRECTORY
cp file1 file2
cp file1 new-file2
cp [options] file1 new-file2

缺省情况下,cp仅复制文件。

Unix cp命令示例

在此示例中,将当前目录中名为data.txt的文件复制到另一个目录/tmp中。
打开一个终端并输入:

cp data.txt /tmp

验证文件已复制到/tmp中,输入:

ls -l /tmp/data.txt
ls -l data.txt

请注意,复制到目录/tmp中的文件都将具有与原始文件相同的名称。
您可以将多个文件复制到另一个目录,如下所示:

cp data.txt foo.tbz image.png /tmp
ls -l /tmp

如何递归复制?

您需要传递-r或-R选项(即递归选项)。
它允许复制包括其所有内容的目录:

cp -r dir1 dir2

要查看复制进度,将-v选项传递给cp命令:

cp -v file1 file2

输出示例:

`file1' -> `file2'

-v使cp变得冗长,在复制文件时显示文件。
您可以将-v选项与其他选项一起传递:

cp -v -r file1 /tmp
cp -v -r dir1 dir2

如何复制所有* .c文件?

复制将所有C源代码文件从/home/Hyman/devel/foo复制到一个名为/projects/backup/foo的目录中,输入:

cp /home/Hyman/devel/foo/*.c /projects/backup/foo/

或者

cp -v /home/Hyman/devel/foo/*.c /projects/backup/foo/

可以使用shell通配符(例如start willdcard或问题通配符)将目录中的所有文件复制到另一个目录:

## copy all perl (*.pl) files to /tmp ##
cp *.pl /tmp
 
## copy all perl (*.pl) files starting with character a to /tmp ##
cp a*.pl /tmp
 
## copy all perl (*.pl) files starting with a,b, and c to /tmp ##
cp [abc]*.pl /tmp
 
## copy all perl (*.pl) files starting with a single file name such as  a.pl, b.pl, .., z.pl to /tmp ##
cp ?.pl /tmp
 
## copy all .html files to /var/www/html ##
## The star wildcard represents anything whose name ends with the .html extension ##
cp -v /home/Hyman/website/*.html /var/www/html

如何确认文件覆盖?

您需要将-i选项传递给cp。
如果目标目录中已经存在文件,它将提示用户,以便确认后覆盖该文件:

cp -i /etc/resolv.conf /tmp

输出示例:

cp: overwrite `/tmp/resolv.conf'? y

您需要输入字母y(带小写字母或带大写字母的小写字母)来响应提示导致命令继续的提示。
任何其他答案都可以防止命令覆盖名为/tmp/resolv.conf的文件。
某些用户将以下别名放在名为$HOME/.kshrc的ksh启动文件中:

$ vi ~/.kshrc

追加以下别名:

## prvent overwriting by default for cp command
alias cp='cp -i'

保存并关闭文件。
输入shell启动文件以使更改立即生效,请输入:

. .kshrc

提示:保留文件权限和其他属性

您需要通过-p选项来保存权限允许的每个源文件的以下文件属性:

  • 文件修改时间
  • 档案存取时间
  • 文件标志
  • 档案模式
  • 文件用户标识和组标识

语法为:

cp -p file1 file2

示例:复制不带-p选项的文件

执行以下命令:

ls -l /etc/resolv.conf
cp /etc/resolv.conf $HOME
ls -l $HOME

示例:复制带有-p选项的文件以保存文件属性

执行以下命令:

ls -l /etc/resolv.conf
## Note: running as root to save attributes ##
sudo cp -p -v /etc/resolv.conf $HOME
ls -l $HOME

在副本中保留权限所允许的尽可能多的修改时间,访问时间,文件标志,文件模式,用户ID和组ID。