
正文
linux实现cp命令 linux cp命令
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
linux命令cp命令(复制文件,递归复制目录)
cp a.txt b.txt 复制文件
cp -a a.txt b.txt 复制文件的时候,同时复制原文件的属性,这样得到的文件会一模一样,比如拥有相同的组,拥有者和执行权限
cp -r ./test ./test1 递归复制文件夹,会将test下的所有文件都复制,但是需要注意的是目标必须是一个目录,不能是文件名
相关问答
Q1: linux命令:cp复制文件或目录
使用Linux系统的时候经常需要运用cp命令进行文件或者文件夹的复制,那么该如何操作cp命令呢?下面我给大家分享一下。
工具/材料
linux系统终端
01
首先登录进linux系统,右键单击选择Open In Terminal选项,如下图所示
02
接下来我们在打开的终端命令行,首先用pwd命令查看当前目录,然后运用cp命令进行文件的复制,如下图所示,注意复制后的文件名称被修改了
03
回到桌面,我们可以看到已经有2个文件了,并且复制的文件名称也已改变,如下图所示
04
最后我们还可以通过cp命令直接复制文件夹到另一个文件夹,如下图所示
Q2: linuxcp命令并显示拷贝时间
在Linux系统里面用到 cp命令复制不能显示文件拷贝linux实现cp命令的进度linux实现cp命令,也不能计算还有多长时间文件可以 拷贝结束linux实现cp命令,现在写一个程序可以显示文件拷贝的进度。
思路:当前目录下面有一个1G大小的bigfile文件
当linux实现cp命令我在命令行下面输入ls -lh bigfile,linux实现cp命令我会得到这个文件的详细信息,当然也可以看到文件的大小。
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 秒
Q3: 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代表宇称变换,是空间反射对称,即同一种粒子之间互为镜像。
Q4: linux如何复制文件
linux系统使用cp命令即可将一个文件夹里面的文件复制到另外一个文件夹里面。
这个命令相当于dos下面的copy命令,具体用法是:cp_r源文件目的文件,其中参数r是指连同源文件中的子目录一同拷贝。../ 和 ./ 代表的 是上级目录以及当前目录。使用时的两种情况:
1、处在当前目录复制当前目录下文件到别的目录:cp文件名称别的文件目录路径
例如,在orz文件夹下有两个子文件夹a和b,a中有文件x.c,b中无文件。此时我们在a文件夹中命令如下:cpx.c../b/。
2、处在当前文件夹下复制另外文件夹下的文件到当前文件夹下:cp路径/文件名称./例如和上面例子一样,命令如下:cp../a/x.c./。
扩展资料:
Linux系统复制错误文件要删除的命令:
命令RM是用来删除文件的,与DOS下的RM(删除一个空目录)是不同的,应该注意。对于rm命令有三个常见的参数:-i、-r和-f。例如,您想删除名为Test:Rm-ITest的文件
系统会问:RM:删除测试?Y,文件将不会被删除,直到你按回车。这样做的原因是Linux没有像DOS恢复删除命令,或者你可以使用pcTool和其他工具来保存删除文件,删除文件在Linux中不能得救,因此有必要使用这个参数删除之前让你再次确认。
参考资料:百度百科-linux命令
Q5: linux编辑文件命令
linux编辑文件命令有如下linux实现cp命令:
1、cp命令linux实现cp命令,作用复制linux实现cp命令,参数如下linux实现cp命令:
-a:将文件的特性一起复制。
-p:连同文件的属性一起复制linux实现cp命令,而非使用默认方式,与-a相似,常用于备份。
-i:若目标文件已经存在时,在覆盖时会先询问操作的进行。
-r:递归持续复制,用于目录的复制行为。
-u:目标文件与源文件有差异时才会复制。
2、rm命令作用为删除,参数:
-f:就是force的意思,忽略不存在的文件,不会出现警告消息。
-i:互动模式,在删除前会询问用户是否操作。
-r:递归删除,最常用于目录删除,它是一个非常危险的参数。
3、mv命令作用为移动文件:
-f:force强制的意思,如果目标文件已经存在,不会询问而直接覆盖。
-i:若目标文件已经存在,就会询问是否覆盖。
-u:若目标文件已经存在,且比目标文件新,才会更新。
4、pwd命令,作用为查看”当前工作目录“的完整路径。
pwd-P#显示出实际路径,而非使用连接(link)路径;pwd显示的是连接路径。
5、rmdir命令删除目录:
rmdir [选项]... 目录...
-p:递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。
-v:verbose显示指令执行过程。
linux实现cp命令的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux cp命令、linux实现cp命令的信息别忘了在本站进行查找喔。







