符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
Linux cp命令主要用于复制文件或目录
成都创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的兰山网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
1.语法
2.参数说明
3.案例
3.1. cp 命令基本用法
3.2 复制目录
3.3 复制软链接文件
3.4. 保留源文件属性复制
3.5. "-l" 和 "-s" 选项
4.cat
6.linux快速删除大量文件
使用Linux系统的时候经常需要运用cp命令进行文件或者文件夹的复制,那么该如何操作cp命令呢?下面我给大家分享一下。
工具/材料
linux系统终端
01
首先登录进linux系统,右键单击选择Open In Terminal选项,如下图所示
02
接下来我们在打开的终端命令行,首先用pwd命令查看当前目录,然后运用cp命令进行文件的复制,如下图所示,注意复制后的文件名称被修改了
03
回到桌面,我们可以看到已经有2个文件了,并且复制的文件名称也已改变,如下图所示
04
最后我们还可以通过cp命令直接复制文件夹到另一个文件夹,如下图所示
在Linux系统里面用到 cp命令复制不能显示文件拷贝的进度,也不能计算还有多长时间文件可以 拷贝结束,现在写一个程序可以显示文件拷贝的进度。
思路:当前目录下面有一个1G大小的bigfile文件
当我在命令行下面输入ls -lh bigfile,我会得到这个文件的详细信息,当然也可以看到文件的大小。
ls -lh bigfile
-rw-rw-r-- 1 nii nii 1000M 7月 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};
int nSrcFileSize = 0;
char szSDestFileMsg[150] = {0};
char szDestFileSizeMsg[10] = {0};
int nDestFileSize = 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 秒
已复制 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 秒