Unix 复制命令示例 [ cp 命令 ]
您需要使用 cp 命令在类 Unix 操作系统下复制文件和目录。本页通过示例解释了 Unix 复制命令。以下命令和常用选项应与以下内容配合使用:
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | 文件管理 |
操作系统兼容性 | AIX • Alma • Alpine • Amazon Linux • Arch • BSD • CentOS • Debian • Fedora • FreeBSD • HP-UX • Linux • macOS • Mint • NetBSD • OpenBSD • openSUSE • Pop!_OS • RHEL • Rocky • Stream • SUSE • Ubuntu • Unix • WSL |
预计阅读时间 | 4 分钟 |
- IBM AIX
- 苹果 macOS(OS X)
- Sun/Oracle Solaris
- FreeBSD/OpenBSD/NetBSD
- Linux
- 惠普
- 以及其他类似 Unix 的操作系统。
Unix cp 命令语法
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 pwvcfmshqyyrkkojnhplwldtdcaqxtpd.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 源代码文件复制到名为 /projects/backup/foo 的目录中,从 /home/vivek/devel/foo 输入:
cp /home/vivek/devel/foo/*.c /projects/backup/foo/
或者
cp -v /home/vivek/devel/foo/*.c /projects/backup/foo/
可以使用 shell 通配符(例如 start willdcard 或 question wild card)将目录中的所有文件复制到另一个目录:
## 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/vivek/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选项来按照权限允许的方式保存每个源文件的以下文件属性:
- 文件修改时间
- 访问时间
- 文件标志
- 模式
- 文件用户 ID 和组 ID
语法如下:
cp -p file1 file2 cp -p /path/to/foo ~/bar/ # verify it # ls -l /path/to/foo ~/bar/
-p示例:不带选项复制文件
键入以下命令:
ls -l /etc/resolv.conf cp /etc/resolv.conf $HOME ls -l $HOME
示例输出:
图 01:不带 -p 选项的 Unix cp 命令
示例:复制文件时-p可选择保存文件属性
键入以下命令:
ls -l /etc/resolv.conf ## Note: running as root to save attributes ## sudo cp -p -v /etc/resolv.conf $HOME ls -l $HOME
图 02:在副本中保留权限允许的尽可能多的修改时间、访问时间、文件标志、文件模式、用户 ID 和组 ID。
使用 sudo 或 su 在 Unix 或 Linux 上复制根级文件
如果您需要复制其他用户的文件或 root 用户拥有的文件,则可以使用 sudo 或 su 命令获取 root 级访问权限。例如:
$ sudo cp /root/filename /backups/
在 sudo 命令提示时输入您的密码。这仅在您被授予 sudo 访问权限时才有效。另一个选择是使用 su 命令成为 root 用户。例如:
$ su -
然后复制文件:
# cp /root/filename /path/to/dest/
总结
cp 命令用于在 Linux、Unix、*BSD 和 macOS 命令行上复制文件和目录。cp 命令的某些选项可能不适用于您的 Unix 版本。因此,我强烈建议您通过键入 man 命令来阅读本地手册页:
$ man cp
$ cp --help