2017-06-20 212 views
0

這是我的shell腳本中的一條語句。 $ {origin}和$ {archive}是2個目錄。如何在shell腳本中檢查並使用cp命令的狀態?

該命令讀取$ {origin}文件夾中的所有jpg,png和jpeg文件,並將它們複製到$ {archive}文件夾中。

find ${origin} -regex '.*\(jpg\|png\|jpeg\)' -exec cp -n {} ${archive} \; 

我想的是,如果CP成功地複製文件,(也表明該文件沒有在$ {}存檔文件夾中存在),它會執行一些命令。

問題:

  1. 我怎麼能知道是否CP成功複製該文件,在shell腳本?

  2. 我可以在哪裏放置if語句?

回答

3

find -exec文檔說:

執行命令;如果返回0狀態,則返回true。

在這種情況下,「true」意味着-exec命令的結果,它控制着匹配文件的處理是否會繼續。所以你可以這樣做:

find ... -exec cp -n {} ${archive} \; -exec OTHER STUFF \; 

也就是說,首先嚐試複製文件。如果cp成功,則將返回0,其中find將視爲true表示「繼續處理此文件」。

+0

感謝您的回答。它完美地解決了我的問題。是否有可能檢查cp命令是否覆蓋shell腳本中的現有文件? –

+0

您可以使用像'-exec test -f $ {archive}/{} \;'這樣的命令,只有當文件已經存在於目標中時,纔會繼續處理。在'test'前放一個'!'來反轉檢查。 –