2013-03-15 45 views
0

我正在嘗試創建一個小外殼腳本,該腳本允許我在將筆記本電腦的硬盤上的大文件複製到外部驅動器時檢查傳輸進度。 從命令行這是一個簡單的壯舉使用光伏和簡單的重定向,雖然行是相當長,你必須知道文件的大小(這就是爲什麼我想要的腳本):外殼腳本中的歧義重定向

console:du filename(to get確切的文件大小)

console:cat filename | PV -s FILE_SIZE -e -r -p> dest_path /文件名

在我的外殼腳本我加入egrep的 「[0-9] {1,}」 -O剝離的文件名和保持只是大小數從杜的回報值,其餘的應該是直截了當的。

#!/bin/bash 
du $1 | egrep "[0-9]{1,}" -o 
sudo cat $1 | pv -s $? -e -r -p > $2/$1 

問題是,當我嘗試使用file12345.mp3這個我因爲egrep的正從文件名中的12345得到一個模棱兩可的重定向錯誤複製,但我只想大小。 這意味着從第一行返回值居然是:

FILE_SIZE

哪些錯誤的。 我該如何修改這個腳本來解析第一個數字直到第一個「」(空格)?

在此先感謝。

回答

0

如果我理解正確:

只保留從du命令輸出的文件大小:

du $1 | awk '{print $1}' 

(假設第1場是文件的大小)

添加雙引用到您的重定向以避免錯誤:

sudo cat $1 | pv -s $? -e -r -p > "$2/$1" 

此引用我因爲你的$2包含空格。

+0

在命令行上工作(只是返回數字),但我仍然得到一個模棱兩可的重定向使用:pcopy NA-495-2013-03-14-Final.mp3/media/Seagate \ Expansion \ Drive /(FYI ,pcopy是腳本名稱)(編輯:也得到模棱兩可的重定向沒有最後一個斜槓) – JackTakahashi 2013-03-15 06:25:37

+0

你能告訴我們你如何運行腳本?我的意思是特別要查看參數如何傳遞給腳本? – Guru 2013-03-15 06:31:51

+0

如果將其分解爲步驟會發生什麼情況。例如,使用Guru的代碼段來查找塊大小。靜態地把它放在你的第二行。當它被硬編碼時它工作嗎? – 2013-03-15 06:36:45