是什么导致“目录不为空”错误?

时间:2011-10-12 18:36:19

标签: bash shell command-line

我写了一个主要 为我工作的脚本。但是,最后两个rmdir命令有时会返回Directory not empty个错误。我怎么打败这个?我尝试添加r,然后添加-rf,返回Illegal option个错误。

我是新手,我会感激任何帮助。这是完整的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

我错过了什么?并提前感谢!

2 个答案:

答案 0 :(得分:10)

对于rmdir命令,您需要添加--ignore-fail-on-non-empty标志,以便删除目录,即使文件在那里也是如此:

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

您也可以使用rm -r

rm -r $newBaseDir/Data/NewDataCopy

来自Wikipedia Entry

  如果目录在UNIX中不为空,则rmdir不会删除该目录。使用rm命令以递归方式删除目录及其所有内容的正确方法。

答案 1 :(得分:1)

检查目录中以.开头的所有文件。我注意到你正在移动*,但是如果有一个名为.hello的文件被调用,则*将不匹配此文件,因此当该文件目录不会为空时你来做一个rmdir。