2017-01-26 220 views
2

我已經編寫了一個腳本來檢查var/log目錄,並將其中的所有目錄都檢入並檢查這些目錄中是否存在一個存檔目錄。如果存檔目錄不存在,我想創建它,但一旦它創建,腳本就會嘗試再次創建它。檢查目錄是否不存在

vdir=$(sudo sh -c "find /var/log/ -maxdepth 1 -type d ! -name "archive"") 
for i in $vdir ;do 
    echo $i 
    if [[ ! -d $i/$arc ]];then 
     sudo sh -c "mkdir $i/$arc" 
     echo "$date:$HN:Creating:$i/$arc:directory" >> logrotation.log 
    fi 
done 

當我執行上面的代碼時,它給了我這個錯誤。似乎腳本沒有檢查條件。

mkdir: cannot create directory ‘/var/log/speech-dispatcher/archive’: File exists 
+0

是什麼'$ arc'包含哪些內容? – Inian

+0

它是創建檔案目錄的一個變種,它提及如下。 arc = archive – SLS

+0

你不能在第一個'sudo sh -c「中找到雙引號」find ...「' – tripleee

回答

4

問題是你有兩個[符號。你只需要一個:

  if [ ! -d $i/$arc ];then 

另外一點:某些外殼版本不處理;是旁邊的右括號。因此,我建議這樣的格式化最好的兼容性:

  if [ ! -d $i/$arc ] ; then 

編輯:既然上面沒有幫助你,更多的心思:

它也完全有可能是你的腳本,運行的您實際上無法讀取$i目錄的內容,因此測試將始終失敗(或實際成功)。但是,當你通過sudo以root身份創建目錄時,它已經存在。

[這也將是更有效地運行在sudo下整個腳本,而不是它只是某些部分。]

+0

感謝您的幫助,我做了這些修改,沒有任何事情發生。還在嘗試創建目錄,但是對於某些目錄而言。不確定它的原因。 – SLS

+1

咦? '[''是Bash加快了對傳統''[''的替代。它工作得很好(因爲你的shell實際上是Bash!),並且不會產生OP描述的錯誤消息。 – tripleee