2011-10-12 293 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

谢谢你。非常好知道。 –