成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

linux拷貝命令進度 linux 拷貝命令

linuxcp命令并顯示拷貝時間

在Linux系統(tǒng)里面用到 cp命令復制不能顯示文件拷貝的進度,也不能計算還有多長時間文件可以 拷貝結(jié)束,現(xiàn)在寫一個程序可以顯示文件拷貝的進度。

公司主營業(yè)務:網(wǎng)站設計、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出臺山免費做網(wǎng)站回饋大家。

思路:當前目錄下面有一個1G大小的bigfile文件

當我在命令行下面輸入ls -lh bigfile,我會得到這個文件的詳細信息,當然也可以看到文件的大小。

ls -lh bigfile

-rw-rw-r-- 1 nii nii 1000M 7月 13 19:41 bigfile

我們可以用popen函數(shù),把執(zhí)行之后的結(jié)果”-rw-rw-r– 1 nii nii 1000M 7月 13 19:41 bigfil”這串字符串接收下來,我們可以提取出來表示文件大小的那段字符串,比如這個我們可以提取”1000”在用atoi函數(shù),把字符串轉(zhuǎn)換為int型數(shù)值1000(不了解popen函數(shù)和atoi函數(shù)的請自行學習),就可以獲得文件大小。

例如我的文件名字叫mycp.c,我執(zhí)行gcc -o mycp mycp.c生成一個mycp的可執(zhí)行文件。

接下來我在命令行上輸入./mycp bigfile destbigfile把當前目錄下面的bigfile文件拷貝為destbigfile,這時我產(chǎn)生一個子進程,子進程負責調(diào)用系統(tǒng)的cp命令拷貝,父進程每隔一秒鐘,去獲取destbigfile、bigfile 文件的大小,就可以知道拷貝的進度,當然也可以獲得拷貝的時間,就可以計算出來離拷貝結(jié)束還有多長時間。

下面是代碼的實現(xiàn):

#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執(zhí)行的命令 ,在創(chuàng)建文件的時候使用*/

char szExcueCommand[150] = {0};

float fRate = 0;

int nUsedTime = 0;

float nLastTime = 0;

/** 入?yún)⒈仨毷侨齻€ */

if (1 == argc)

{

printf("please input the src and des file\n");

return -1;

}

/** 產(chǎn)生子進程 */

pid = fork();

/** 如果是子進程,負責執(zhí)行復制命令 */

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);

/** 復制完成之后,退出循環(huán) */

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;

}

/** 得到命令的結(jié)果 */

if (NULL == fgets(szBuff, sizeof(szBuff), fstream))

{

pclose(fstream);

return -1;

}

pclose(fstream);

strcpy(pchMsg,szBuff);

return 0;

}

Linux下執(zhí)行結(jié)果為:

./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 秒

Linux文件拷貝命令

最常見的拷貝命令,常用的形式有

-p - 保留源文件的所有者、用戶組、權(quán)限、修改和訪問時間,以及一些擴展屬性;

-R 或 -r - 遞歸復制目錄,將目錄及其下的所有文件和子目錄都復制到目標位置;

-d - 保留軟鏈接;

-a - 即歸檔模式,相當于 -dpR;

-v - 顯示rsync過程中詳細信息;

-a - 歸檔模式,表示遞歸傳輸并保持文件屬性;

-z - 傳輸時進行壓縮提高效率;

-P - 顯示文件傳輸?shù)倪M度信息;

-e - 指定所要使用的遠程shell程序,默認為ssh,無特殊情況不需要指定;

--exclude=PATTERN - 指定排除不需要傳輸?shù)奈募J剑?/p>

--exclude-from=FILE - 從文件中讀取指定排除不需要傳輸?shù)奈募J剑?/p>

linux中copy多個文件有方法顯示進度條嗎?

拷貝多個文件或者文件夾下有多個文件的時候,可以使用rsync命令,可以顯示拷貝進度,而且支持斷點重傳。

rsync -av --progress /source/file /dest/dir

新聞名稱:linux拷貝命令進度 linux 拷貝命令
文章網(wǎng)址:http://jinyejixie.com/article12/dosihgc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT、虛擬主機、商城網(wǎng)站、品牌網(wǎng)站設計網(wǎng)站導航、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設
儋州市| 邵阳县| 岚皋县| 东山县| 高青县| 临桂县| 花莲县| 灌南县| 衢州市| 托克托县| 布尔津县| 丽水市| 山丹县| 县级市| 勃利县| 富平县| 临邑县| 宁河县| 曲靖市| 娱乐| 万盛区| 涿州市| 古田县| 通渭县| 南岸区| 习水县| 时尚| 杭锦旗| 石城县| 民县| 惠来县| 临武县| 河池市| 岑溪市| 翁源县| 昆明市| 潍坊市| 永嘉县| 胶南市| 津南区| 江北区|