确定目录是否为空,如果是,则将其删除,并从单独的列表中删除该目录名

时间:2013-10-28 15:40:23

标签: shell directory csh

我有一个名为STA的目录。在该目录中有大约600个其他目录,其格式为hh:mm:ss(例如00:01:34)。在每个子目录中应该是三个文件。我还有一个文件'waveformlist',(包含在STA中),它是所有这些子目录的列表,即:。

00:01:34
00:02:35
etc. 

许多子目录不包含这三个文件,而是空的。我想运行一个C-shell脚本来遍历每个子目录并检查它是否为空。 如果它是空的,我想从主目录STA中删除该子目录,并从列表'waveformlist'中删除该子目录名。

到目前为止,我的脚本如下。它无法识别子目录何时为空并且不喜欢rm $ dir行。另外,我不知道如何从'waveformlist'中删除子目录名。

#!/bin/csh

echo "Enter name of station folder to apply filter to as 'STA' e.g. APZ:"
set ans = $<
cd $ans

set c=0

foreach dir (*:*)
    if ("${c}" == 0) then
    echo "Empty directory:" $dir
    rm $dir
    else
    echo ${dir} "has files"
    endif
end

我希望我已经足够清楚了。

1 个答案:

答案 0 :(得分:0)

通常我只使用rmdir *,因为它只会删除空目录,并会忽略包含文件和普通文件的目录。如果你给它一个包含文件或普通文件的目录,你可能会遇到一些错误。因此,这是一个非常安全的执行命令。

话虽如此,这样的事可能对你有用

foreach d ( $ans/* )
    if -d $d then
#        echo $d is a directory                                                                                                                                         
        set numfiles = ( `ls $d| wc -l` )
        if ( $numfiles == 0 ) then
            echo rmdir $d
            rmdir $d
        endif
    endif
end