1

STA という名前のディレクトリがあります。そのディレクトリ内には、hh:mm:ss (00:01:34 など) の形式のディレクトリが約 600 あります。これらの各サブディレクトリ内には、3 つのファイルが必要です。これらすべてのサブディレクトリのリストである「waveformlist」(STA に含まれる) ファイルもあります。

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

多くのサブディレクトリにはこれら 3 つのファイルが含まれておらず、代わりに空になっています。C シェル スクリプトを実行してすべてのサブ ディレクトリを調べ、それが空かどうかを確認したいと考えています。空の場合、メイン ディレクトリ 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

私は十分に明確であることを願っています。

4

1 に答える 1

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
于 2014-10-18T14:21:26.550 に答える