2017-04-18 29 views
0

我有一個cronjob從一個JSON格式的網站得到的價格清單,並將其複製到正確的文件夾,它看起來像這樣:Ubuntu的命令複製文件只有在原產地是不是空

curl 'https://somesite.web/api/list.json' > ~/list.json.tmp && cp ~/list.json.tmp /srv/www/list.json > /dev/null

問題是,當cron試圖獲取列表並獲得一個空的JSON文件時,網站被關閉了幾次。爲了防止這種情況發生,有沒有辦法讓cron只複製文件(如果不是空的話)(沒有cp選項)?或者我應該創建一個腳本來做到這一點,並在獲得列表後調用腳本?

回答

1
curl ... && [ -s ~/list/json.tmp ] && cp ~/list/json.tmp /srv/www/list.json 

如果指定文件存在且不爲空,則-s測試爲真。

(順便說一句,> /dev/null重定向是沒有必要的。該cp命令可能會打印錯誤消息到stderr,但它不應該打印任何東西,到stdout,這是您要重定向的東西。)

+0

那完美。感謝您及時的回覆。 – AngelGris

2

也許curl --fail會完成你想要的嗎?從手冊頁:

-f,--fail
       (HTTP)失敗默默(沒有輸出)的服務器錯誤。這主要是爲了更好地使腳本等更好地處理失敗的嘗試。在正常情況下,當HTTP服務器無法傳遞文檔時,它會返回一個HTML文檔來說明(通常也會描述爲什麼和更多)。此標誌將防止捲曲的輸出是和返回錯誤22

這將導致捲曲帶故障代碼退出,因此在聲明中&&不會執行復制。

相關問題