linuxcp命令函数 linux中cp指令

每天一个linux命令(cp)功能说明:复制文件或目录
用法:
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
补充说明:cp命令用在复制文件或目录,如同时指定两个以上的文件或目录,且最后的目标是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中 。若同时指定多个文件或目录,而最后的目标并非是一个已存在的目录,则会出现错误信息 。
常用参数:
-b或--backup删除,覆盖目标文件之前的备份,备份文件会在字尾加上一个备份字符串 。
-f或--force强行复制文件或目录,不论目标文件或目录是否已存在 。
-i或--interactive覆盖既有文件之前先询问用户 。
-l或--link对源文件建立硬连接,而非复制文件 。
-r 递归处理,将指定目录下的文件与子目录一并处理 。
-s或--symbolic-link对源文件建立符号连接,而非复制文件 。
-S备份字尾字符串或--suffix=备份字尾字符串用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字尾字符串是符号"~" 。
-v或--verbose显示指令执行过程 。
-t 指定目标文件夹,目标文件夹需存在 。
Linux cp命令怎么使用?该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大 。
语法: cp [选项] 源文件或目录 目标文件或目录
说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中 。
该命令的各选项含义如下:
- a 该选项通常在拷贝目录时使用 。它保留链接、文件属性 , 并递归地拷贝目录,其作用等于dpR选项的组合 。
- d 拷贝时保留链接 。
- f 删除已经存在的目标文件而不提示 。
- i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认 。回答y时目标文件将被覆盖 , 是交互式拷贝 。
- p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中 。
- r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件 。此时目标文件必须为一个目录名 。
- l 不作拷贝,只是链接文件 。
需要说明的是 , 为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项 。
例子:
Cp -i file1 file2(将文档 file1 复制成 file2 . _i为提示确认 。)
cp file1 dir1将文档 file1 复制到目录 dir1 下 , 文件名仍为 file1.
cp /tmp/file1 .将目录 /tmp 下的文档 file1复制到现行目录下,档名仍为 file1.
cp /tmp/file1 file2将目录 /tmp 下的文档 file1现行目录下,档名为file2
cp -r dir1 dir2(recursive copy) 复制整个目录.若目录 dir2 不存在,则将目录dir1,及其所有文档和子目录 , 复制到目录 dir2 下 , 新目录名称为dir1.若目录dir2不存在,则将dir1 , 及其所有文档和子目录 , 复制为目录 dir2.
CP,Content Provider,即内容提供商,指依法或依约定拥有版权和/或邻接权以及与版权作品有关的其他权利的,以及依法或依约定有权代表版权人和/或邻接权人进行许可授权、收取版权使用费用的公司实体或机构 。
CP,同样也是COUPLE的缩写,即配对,主要用在同人作品中.
比如,在火影忍者耽美同人里说CP是鼬卡或鼬X卡卡西,就是以宇智波鼬和旗木卡卡西为配对进行创作.
在化学领域,CP是指化学纯,标签为中蓝,用于一般化学试验 。
CP,C代表电荷共轭的变换,是粒子和反粒子互相对称,即对于粒子和反粒子;P代表宇称变换,是空间反射对称,即同一种粒子之间互为镜像 。
linux命令cp命令(复制文件,递归复制目录)cp a.txt b.txt 复制文件
cp -a a.txt b.txt 复制文件的时候,同时复制原文件的属性,这样得到的文件会一模一样,比如拥有相同的组,拥有者和执行权限
cp-r ./test./test1递归复制文件夹,会将test下的所有文件都复制,但是需要注意的是目标必须是一个目录,不能是文件名
linuxcp命令并显示拷贝时间在Linux系统里面用到 cp命令复制不能显示文件拷贝的进度 , 也不能计算还有多长时间文件可以 拷贝结束,现在写一个程序可以显示文件拷贝的进度 。
思路:当前目录下面有一个1G大小的bigfile文件
当我在命令行下面输入ls -lh bigfile,我会得到这个文件的详细信息,当然也可以看到文件的大小 。
ls -lh bigfile
-rw-rw-r-- 1 nii nii 1000M7月 13 19:41 bigfile
我们可以用popen函数,把执行之后的结果”-rw-rw-r– 1 nii nii 1000M 7月 13 19:41 bigfil”这串字符串接收下来,我们可以提取出来表示文件大小的那段字符串,比如这个我们可以提取”1000”在用atoi函数,把字符串转换为int型数值1000(不了解popen函数和atoi函数的请自行学习),就可以获得文件大小 。
例如我的文件名字叫mycp.c,我执行gcc -o mycp mycp.c生成一个mycp的可执行文件 。
接下来我在命令行上输入./mycp bigfile destbigfile把当前目录下面的bigfile文件拷贝为destbigfile,这时我产生一个子进程,子进程负责调用系统的cp命令拷贝,父进程每隔一秒钟,去获取destbigfile、bigfile 文件的大小,就可以知道拷贝的进度,当然也可以获得拷贝的时间,就可以计算出来离拷贝结束还有多长时间 。
下面是代码的实现:
#include
#include
#include
#include
#include
#include
#include
/** 得到文件的详细信息 */
int getFileMsg(char* pchCmd,char *pchMsg);
int main(int argc,char* argv[])
{
char szSrcFileMsg[150] = {0};
char szSrcFileSizeMsg[10] = {0};
intnSrcFileSize = 0;
char szSDestFileMsg[150] = {0};
char szDestFileSizeMsg[10] = {0};
intnDestFileSize = 0;
int pid = 0;
/** shell执行的命令 ,在创建文件的时候使用*/
char szExcueCommand[150] = {0};
float fRate = 0;
int nUsedTime = 0;
float nLastTime = 0;
/** 入参必须是三个 */
if (1 == argc)
{
printf("please input the src and des file\n");
return -1;
}
/** 产生子进程 */
pid = fork();
/** 如果是子进程,负责执行复制命令 */
if (0 == pid)
{
sprintf(szExcueCommand,"%s %s %s","cp",argv[1],argv[2]);
printf("%s\n",szExcueCommand);
system(szExcueCommand);
return 0;
}
/** 父进程负责把正在复制的原文件和复制的目标文件的大小计算出来,就可以知道复制的进度,计算频率为1秒一次 */
else
{
/** 获得原文件的大小 */
if (-1 == getFileMsg(argv[1],szSrcFileMsg))
{
printf("get sorce file message failed \n");
return -1;
}
/** 把原文件大小的信息取出来 */
strncpy(szSrcFileSizeMsg,szSrcFileMsg 21,4);
szSrcFileSizeMsg[5] = '\0';
nSrcFileSize = atoi(szSrcFileSizeMsg);
while(1)
{
sleep(1);
nUsedTime;
/** 获得目标文件的大小 */
if (-1 == getFileMsg(argv[2],szSDestFileMsg))
{
printf("get dest file message failed \n");
return -1;
}
/** 把原文件大小的信息取出来 */
strncpy(szDestFileSizeMsg,szSDestFileMsg 21,4);
szDestFileSizeMsg[5] = '\0';
nDestFileSize = atoi(szDestFileSizeMsg);
/*** 计算复制的进度 */
fRate = (nDestFileSize * 100) / nSrcFileSize ;
/** 计算剩下的时间 */
nLastTime = ((100 - fRate) * nUsedTime) / fRate;
/** 打印进度条 */
printf("已复制 %.2f %%还需要%.1f秒\n",fRate,nLastTime);
/** 复制完成之后,退出循环 */
if (nSrcFileSize == nDestFileSize)
{
printf("复制完成,耗时 %d 秒\n",nUsedTime);
break;
}
}
}
return 0;
}
/** 得到文件的详细信息 */
int getFileMsg(char* pchCmd,char *pchMsg)
{
FILE *fstream=NULL;
char szBuff[BUFSIZ] = {0};
char szExcueCommand[150] = {"ls -lh"};
sprintf(szExcueCommand,"%s %s",szExcueCommand,pchCmd);
if (NULL==(fstream=popen(szExcueCommand,"r")))
{
perror("execute command failed: ");
return -1;
}
/** 得到命令的结果 */
if (NULL == fgets(szBuff, sizeof(szBuff), fstream))
{
pclose(fstream);
return -1;
}
pclose(fstream);
strcpy(pchMsg,szBuff);
return 0;
}
Linux下执行结果为:
./mycp bigfile destbigfile
cp bigfile destbigfile
已复制 3.00 %还需要32.3秒
已复制 5.00 %还需要38.0秒
已复制 8.00 %还需要34.5秒
已复制 10.00 %还需要36.0秒
已复制 12.00 %还需要36.7秒
已复制 13.00 %还需要40.2秒
已复制 14.00 %还需要43.0秒
已复制 17.00 %还需要39.1秒
已复制 20.00 %还需要36.0秒
已复制 21.00 %还需要37.6秒
已复制 24.00 %还需要34.8秒
已复制 24.00 %还需要38.0秒
已复制 27.00 %还需要35.1秒
已复制 32.00 %还需要29.8秒
已复制 33.00 %还需要30.5秒
已复制 35.00 %还需要29.7秒
已复制 38.00 %还需要27.7秒
已复制 41.00 %还需要25.9秒
已复制 42.00 %还需要26.2秒
已复制 43.00 %还需要26.5秒
已复制 44.00 %还需要26.7秒
已复制 48.00 %还需要23.8秒
已复制 50.00 %还需要23.0秒
已复制 52.00 %还需要22.2秒
已复制 53.00 %还需要22.2秒
【linuxcp命令函数 linux中cp指令】已复制 53.00 %还需要23.1秒
已复制 57.00 %还需要20.4秒
已复制 59.00 %还需要19.5秒
已复制 61.00 %还需要18.5秒
已复制 63.00 %还需要17.6秒
已复制 63.00 %还需要18.2秒
已复制 66.00 %还需要16.5秒
已复制 69.00 %还需要14.8秒
已复制 70.00 %还需要14.6秒
已复制 72.00 %还需要13.6秒
已复制 73.00 %还需要13.3秒
已复制 75.00 %还需要12.3秒
已复制 78.00 %还需要10.7秒
已复制 79.00 %还需要10.4秒
已复制 82.00 %还需要8.8秒
已复制 83.00 %还需要8.4秒
已复制 84.00 %还需要8.0秒
已复制 87.00 %还需要6.4秒
已复制 90.00 %还需要4.9秒
已复制 91.00 %还需要4.5秒
已复制 93.00 %还需要3.5秒
已复制 93.00 %还需要3.5秒
已复制 96.00 %还需要2.0秒
已复制 99.00 %还需要0.5秒
已复制 100.00 %还需要0.0秒
复制完成,耗时 50 秒
关于linuxcp命令函数和linux中cp指令的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读