2013-03-27 49 views
0

我有一個shell腳本可以調用一些其他生成一些文件的腳本。在我的shell腳本結尾處,我想將生成的所有文件(它們具有相同的preffix)移動到文件夾中。在Shell腳本中移動生成的文件

但是,由於某種原因,如果我在腳本的末尾調用了mv,我得到這個錯誤,就像文件系統仍然不知道我認爲的文件。

mv: cannot stat `foo_*': No such file or directory 

我第一次嘗試「解決」,這是引進sleep通話幾秒鐘,以幫助我避免這個問題,但是,即使價值是非常高的,我確信已經創建的文件,我得到了同樣的錯誤。

然後我試圖運行我的腳本是這樣的:

sh myscript.sh ; mv foo_* bar 

,並沒有問題workded。

任何想法爲什麼會發生這種情況,以及如何避免必須使用兩個腳本或雙線命令來實現所需的效果?

謝謝。

編輯:我正在寫這個給那些可能從Google來到這裏並且有類似問題的人。

基本上,我產生mv命令是這樣的:

mv $preffix"_*" $destination

出於某種原因,這是不正常。剛剛創建這樣一個臨時變量:

MV_CMD=$preffix"_*" $destination

,然後說這就是這樣的:

mv $MV_CMD

如果有人知道更清潔的方式,請隨時回答。謝謝你的回答。

+0

我無法想象腳本的結尾看起來像是什麼問題。你能顯示一些腳本的最小版本來顯示問題嗎? 'foo_ *'和'foo *'之間的差異是否顯着? – 2013-03-27 17:47:05

+2

'myscript.sh'是否改變當前的工作目錄?如果是這樣,腳本可能不會執行您期望的目錄中的'mv'命令(這可以解釋爲什麼將它作爲單獨的命令運行)。 – bta 2013-03-27 18:16:09

+0

...或做'mv/your/dir/foo *' – fedorqui 2013-03-27 18:36:13

回答

1

進行調試,而不是附加sleep隨後mv到腳本的末尾添加:

pwd 
ls -la . 

這將打印當前目錄和所有它的內容到控制檯。

此外,在啓用調試的情況下執行您的腳本:sh -x ./myscript.sh查看所有執行的命令,以便您更好地瞭解原因可能是什麼,以及創建的文件和目錄。

+0

感謝您的提示。我顯然還有很多東西要學習shell腳本。 – nunos 2013-03-28 16:04:00

+0

發現問題,您的提示幫助調試它。基本上,我以某種方式以錯誤的方式生成命令,因爲如果我硬編碼它,它沒有問題。我有這樣的'mv $ preffix「_ *」$ destination'。相反,只是將它分配給一個變量,然後執行'mv $ mymvcmd'並立即開始工作。 – nunos 2013-03-28 16:45:15

+0

如果你知道更清潔更好的方法來「解決」這一點,請讓我知道。謝謝。 – nunos 2013-03-28 16:50:17

0

它是一種常見的做法是不留下垃圾,那你的前衛創建

檢查其他炮彈rm命令.......他們可能不得不說明刪除或刪除創建的中間文件。

您還應該檢查特定的目錄更改,這些文件可能已在其他位置創建或移動到某個位置。

但無論在哪種情況下,您都需要瀏覽查找rm,mv或cd命令的腳本。

應該這樣做。