2011-10-12 291 views
2

我寫了一個腳本,它是,主要是爲我工作。但是,最後的兩個rmdir命令有時會返回Directory not empty錯誤。我如何擊敗這個?我嘗試加入r,然後-rf其中返回Illegal option錯誤。是什麼導致「Directory not empty」錯誤?

我是一個新手,我會很感激任何幫助。下面是完整的shell腳本,這又是大多精美的工作:

if [[ -z "${1}" ]]; then 
    die "FolderName Required" 
fi 

newDirName="DirectoryName" 
newBaseDir="/Users/JSG/Desktop/DataFarm/$1/" 
/bin/mkdir -p $newBaseDir/{ProtectedOrig,Data} 

echo -n "---Data Folder Setup 

---Data Introduction 

---Data Audit/Manipulation 

---Data Queries" > $newBaseDir/Data/$1_DataJournal.txt 

ditto NewData/ NewDataCopy 
fab deploy_data_to_s3:data=* 
mv NewData/ $newBaseDir/ProtectedOrig/NewData 
mv NewDataCopy/ $newBaseDir/Data/NewDataCopy 
mv $newBaseDir/Data/NewDataCopy/* $newBaseDir/Data/ 
rmdir $newBaseDir/Data/NewDataCopy 
mv $newBaseDir/ProtectedOrig/NewData/* $newBaseDir/ProtectedOrig/ 
rmdir $newBaseDir/ProtectedOrig/NewData 
chflags -R uchg $newBaseDir/ProtectedOrig/ 
mkdir NewData 

我缺少什麼?並提前致謝!

回答

9

對於rmdir命令,你需要添加--ignore-fail-on-non-empty標誌,以便它刪除目錄,即使一個文件都在裏面,像這樣:

rmdir --ignore-fail-on-non-empty $newBaseDir/Data/NewDataCopy 

你也可以只使用rm -r太:

rm -r $newBaseDir/Data/NewDataCopy 

Wikipedia Entry

命令rmdir不會如果目錄在UNIX中不爲空,請將其刪除。遞歸移除目錄及其所有內容的正確方法是使用rm命令。

+1

增加了'rm -r',它現在的腳本就像一個魅力。但是,'ignore-fail-on-non-empty'返回'Illegal option'錯誤。任何想法爲什麼?非常非常感謝你。 –

+0

可能該標誌已被棄用或在Unix上不再使用。無論如何,使用rm -r是刪除空白或非空的目錄的首選方式。 –

1

檢查以.開頭的目錄中的任何文件。我注意到你正在移動*,但是如果有一個文件被調用,例如.hello,那麼*將不匹配此文件,因此當您執行rmdir時目錄不會爲空。

+0

謝謝你。非常好知道。 –