2012-10-03 63 views
1

我試圖將$ CurrentFile從$ CurrentDir複製到$ CurrentBackup。我遇到的問題是該文件從父目錄複製每個$ CurrentFile。 因此,例如,Shell腳本正在複製父目錄中的每個文件

讓的說輸入這種

CurrentDir=/home/usr/logs 
CurrentFile='SystemOut_*' 
CurrentDay=6 
CurrentBackup=/backup 

但是,該命令將/家庭的/ usr/Serverinf至$ CurrentBackup複製每$ CurrentFile ...

find . $CurrentDir . -type f -name $CurrentFile -mtime +$CurrentDay -exec cp {} $CurrentBackup \; 

我不確定我做錯了什麼...有人能告訴我我做錯了什麼嗎? 如果我不能使用這個命令,你能告訴我替代命令嗎?

感謝您的幫助!

+0

你說它正在移動,但你正在使用cp。你確定它正在移動,而不是複製? –

+0

哦操作我的意思是複製不移動...但它仍然複製一切... – user1516649

+0

爲什麼有一個「。」 $ CurrentDir之前和之後? –

回答

1

至於我可以告訴這個問題是多餘的點:

find . $CurrentDir . -type f -name $CurrentFile -mtime +$CurrentDay -exec cp {} $CurrentBackup \; 

    -    - 

您正在尋找在當前目錄中搜索$CurrentDir。擺脫點,並使用雙引號,以防止殼在find有史以來看到它們擴大名稱。

find "$CurrentDir" -type f -name "$CurrentFile" -mtime "+$CurrentDay" -exec cp {} "$CurrentBackup" \; 
+0

這就是我得到如果我調試,如果我運行此代碼++找到''-type f -name'SystemOut_ *'-mtime +6 -exec cp'{ }'''''' 找不到:'沒有這樣的文件或目錄 ++ find''-name'SystemOut_ *'-mtime +6 -delete find:can not search'':沒有這樣的文件或目錄 – user1516649

+0

@ user1516649這是告訴你的名字'$ CurrentDir'未被設置(擴展爲空字符串)。檢查你的拼寫和大小寫,以確保它是你想要的名字。 (同樣注意'$ CurrentBackup'也出現同樣的問題。) – kojiro

+0

補充一點是你是對的....但是現在我得到了這個錯誤(當我重寫時只是輸入錯誤)run.sh:第57行:let:CurrentBackup =/home/usr/log:語法錯誤:operand e xpected(錯誤標記爲「/ home/usr/log」).. CurrentDir的相同內容 – user1516649

5

您的$ CurrentDir前後有額外的點。除了$ CurrentDir之外,這將使它查找實際當前目錄中的文件。

此外,圍繞任何可能包含通配符的變量使用雙引號很重要。

find $CurrentDir -type f -name "$CurrentFile" -mtime +$CurrentDay -exec cp {} $CurrentBackup \; 

更妙的是,把雙引號的所有變量,除非你明確地需要把它擴展到多個參數:

find "$CurrentDir" -type f -name "$CurrentFile" -mtime +"$CurrentDay" -exec cp {} "$CurrentBackup" \; 
1

是啊,你的問題歸結爲doublequoting,防止做文件名擴展的bash,由沃恩卡託指出。當您執行以下兩條命令時,請參閱輸出的差異:

echo $CurrentFile 
echo "$CurrentFile" 

通常,雙引號shell變量是個好主意。

+0

我不能低估這一點,因爲雙引號是問題的一部分,但它不是全部問題,所以我也無法贊成它。 – kojiro

相關問題