我有一个名为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
我希望我已经足够清楚了。
答案 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