cp是Unix中的基本命令之一。您已经知道它用于将一个或多个文件或目录从源复制到目标。
尽管本教程是针对初学者的,但它对于每个人使用一些实际示例快速回顾各种cp命令选项也很有帮助。
即使您一直在使用cp命令,以下可能还是一个新的示例,对于您来说还是新手。
复制命令的一般形式:
cp [option] source destination
1.将文件或目录从源复制到目标
要复制文件,您需要将源和目标传递给copy命令。以下示例将文件从project / readme.txt复制到projectbackup / readme-new.txt
$ cp 项目/ readme.txt projectbackup/readme-new.txt $ cd projectbackup/ $ ls readme-new.txt
如果要将文件从一个文件夹复制到另一个具有相同名称的文件夹,则仅目标目录名称就足够了,如下所示。
$ cp 项目/ readme.txt projectbackup/ $ cd projectbackup/ $ ls readme.txt
可以使用递归选项-r将目录(及其所有内容)从源复制到目标,如下所示:
$ ls project src / bin / doc / lib / test / readme.txt许可 $ cp -r项目/备份/ $ ls 后备 src / bin / doc / lib / test / readme.txt许可
2.复制多个文件或目录
您可以将多个文件从源复制到目标,如下所示:
$ cd src/ $ cp global.c main.c parse.c /home/thegeekstuff/projectbackup/src/
如果源文件具有通用模式,请使用通配符,如下所示。在此示例中,所有c扩展名文件都被复制到/ home / thegeekstuff / projectbackup / src /目录。
$ cp *.c /home/thegeekstuff/projectbackup/src/
复制多个目录,如下所示。
$ cd 项目/ $ cp -r src/ bin/ /home/thegeekstuff/projectbackup/
3.复制到目标位置之前先进行备份
如果目标文件已经存在且名称相同,则cp允许您在覆盖目标文件之前先对其进行备份。
在此示例中,readme.txt同时存在于project /和projectbackup /目录中,并且在将其从project /复制到projectbackup /时,将如下所示备份现有的readme.txt:
$ cd projectbackup $ ls -l readme.txt -rw-r--r-- 1 bala geek 1038 Jan 8 13:15 readme.txt $ cd ../project $ ls -l readme.txt -rw-r--r-- 1 bala geek 1020 Jan 8 12:25 readme.txt $ cp --backup readme.txt /home/thegeekstuff/projectbackup/
现有文件已移至readme.txt〜,新文件复制为readme.txt,如下所示。
$ cd /home/thegeekstuff/projectbackup/ $ ls -l -rw-r--r-- 1 bala geek 1020 Jan 8 13:36 readme.txt -rw-r--r-- 1 bala geek 1038 Jan 8 13:15 readme.txt~
谈到备份,重要的是要您了解如何 rsync命令 有效地备份文件。
4.复制时保留链接
当执行cp命令时,如果源是链接文件,则将复制实际文件,而不是链接文件。如果仅按原样复制链接,请指定选项-d,如下所示:
下面显示了没有选项-d的情况,它将复制文件(而不是链接):
$ cd 项目/ bin $ ls -l startup.sh lrwxrwxrwx 1 root root 18 Jan 8 13:59 startup.sh -> ../test/startup.sh $ cp startup.sh /home/thegeekstuff/projectbackup/bin/ $ cd /home/thegeekstuff/projectbackup/bin/ $ ls -l -rw-r--r-- 1 root root 102 Jan 8 14:02 startup.sh
要在复制时保留链接,请执行以下操作:
$ cd 项目/ bin $ cp -d startup.sh /home/thegeekstuff/projectbackup/bin/ $ ls -l startup.sh lrwxrwxrwx 1 root root 18 Jan 8 14:10 startup.sh -> ../test/startup.sh
5.唐’t覆盖现有文件
如果仅在目标文件不存在时复制’如果存在,请使用选项-n,如下所示。这个赢了’t覆盖现有文件,cp命令将返回成功退出代码,如下所示:
$ cd projectbackup $ ls -l readme.txt -rw-r--r-- 1 bala geek 1038 Jan 8 13:15 readme.txt $ cd ../project $ ls -l readme.txt -rw-r--r-- 1 bala geek 1020 Jan 8 12:25 readme.txt $ cp -n readme.txt /home/thegeekstuff/projectbackup/bin/ $ echo $? 0
如下所示,目标文件没有’t get overwritten.
$ cd projectbackup $ ls -l readme.txt -rw-r--r-- 1 bala geek 1038 Jan 8 13:15 readme.txt
6.覆盖前确认(交互模式)
当使用-i选项时,它将在覆盖文件之前要求确认,如下所示。
$ cp -i readme.txt /home/thegeekstuff/projectbackup/ cp: overwrite `/home/thegeekstuff/projectbackup/readme.txt'? y
7.创建指向文件的硬链接(而不是复制)
执行cp命令时,可以创建文件的硬链接(而不是复制文件)。以下示例将sample.txt文件的硬链接创建到目录test /中,
$ ls -li sample.txt 10883362 -rw-r--r-- 2 bala geek 1038 Jan 9 18:40 sample.txt $ cp -l sample.txt test/ $ ls -li test/sample.txt 10883362 -rw-r--r-- 2 bala geek 1038 Jan 9 18:40 test/sample.txt
如上所示,test / sample.txt是到sample.txt文件的硬链接文件,并且两个文件的inode相同。
8.创建指向文件或目录的软链接(而不是复制)
执行cp命令时,可以创建到文件或目录的软链接。在以下示例中,为libFS.so.6.0.0创建的符号链接为libFS.so,
# cd /usr/lib/ # ls -l libFS.so.6.0.0 -rw-r--r-- 1 root root 42808 Nov 19 2010 libFS.so.6.0.0 # cp -s libFS.so.6.0.0 libFS.so # ls -l libFS.so lrwxrwxrwx 1 root root 14 Jan 9 20:18 libFS.so -> libFS.so.6.0.0
9.复制时保留文件或目录的属性
使用-p选项,可以保留文件或目录的属性,如下所示:
$ ls -l sample.txt -rw-r--r-- 2 bala geek 1038 Jan 9 18:40 sample.txt $ cp -p sample.txt test/ $ ls -l test/sample.txt -rw-r--r-- 2 bala geek 1038 Jan 9 18:40 test/sample.txt
也可以仅保留所需的属性,例如模式,所有权,时间戳等,
以下示例在复制文件时保留其模式:
$ cp --preserve=mode sample.txt test/
10.仅在源文件比目标文件新或丢失时复制
复制不’一个小文件花费很多时间,但是复制一个大文件可能要花费大量时间。因此,在复制大文件时,您可能需要确保仅当源文件比目标文件新时,或者当使用-u选项丢失目标文件时,才进行操作,如下所示。
在此示例中,两个文件LICENSE和readme.txt将被从project /复制到projectbackup /。但是,LICENSE文件已经存在于projectbackup /目录中,并且比project /目录中的文件更新。
$ cd 项目/ $ ls -l LICENSE readme.txt -rw-r--r-- 1 bala geek 108 Jan 8 13:14 LICENSE -rw-r--r-- 1 bala geek 32 Jan 8 13:16 readme.txt $ cd /home/thegeekstuff/projectbackup/ $ ls -l LICENSE readme.txt ls: cannot access readme.txt: No such file or directory -rw-r--r-- 1 root root 112 Jan 9 20:31 LICENSE
因此,在此示例中,无需将LICENSE文件再次复制到projectbackup /目录。如果您使用-u选项,则cp命令会自动注意这一点,如下所示。在以下示例中,仅复制了readme.txt文件,如该文件上的时间戳所示。
$ cp -u -v LICENSE readme.txt /home/thegeekstuff/projectbackup/ `readme.txt' -> `/home/thegeekstuff/projectbackup/readme.txt' $ cd /home/thegeekstuff/projectbackup/ $ ls -l LICENSE readme.txt -rw-r--r-- 1 bala geek 112 Jan 9 20:31 LICENSE -rw-r--r-- 1 bala geek 32 Jan 9 22:17 readme.txt
如果您喜欢这篇文章,您可能还会喜欢..
![]() |
![]() |
![]() |
![]() |
非常清楚,对这些联络员很有启发。