This is the mail archive of the cygwin-apps@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: a script to remove empty directories


Bruce Ingalls wrote:

Anyhow, here is an elegant, working solution. If no optional dir is passed, then the current dir is checked recursively, and empty subdirectories are passed.

#!/bin/bash
ROOT=${1:-.}
if [ ! -d $ROOT ];then ROOT=.;fi
find $ROOT -type d -empty|xargs rmdir -

Meanwhile I was able to overcome the spaces in filenames problem, and, funny enough, i used wc -l as in the script posted by Volker for testing a directory to be empty. But I use recursion, which is bad for incorporation in other scripts. Anyway, below is, just for the records, my meanwhile obsolete solution.


Your version is much faster (but has problems with spaces) than my version and the version posted by Volker. (e.g. 4s versus 50s).

----- begin -----
#!/usr/bin/bash
# rmed -- remove empty directories recursively
# Andreas Seidl -- http://www.fmi.uni-passau.de/~seidl/ -- 19.02.2004
# usage: rmed [DIR] where DIR is an optional argument, the directory
#   where to start examining.
if [ -z "$1" ] ; then
  basedir="."
else
  basedir=$1
fi
cd "$basedir"
for dir in * ; do
  if [ -d "`pwd`/$dir" ] ; then
    if [ `\ls "$dir" | wc -l` -eq 0 ] ; then
    #if [ -z $(\ls "$dir") ] ; then
      echo "empty: `pwd`/$dir"
      rmdir "$dir"
    else
      #echo "non-empty: `pwd`/$dir"
      rmed "$dir"
    fi
  fi
done
cd -
----- end -----

Here is a shortcoming:
1) Makes only one pass, so if a directory only contains empty subdirectories, that new, empty parent remains.
You could try saving the dirnames/parents of deleted directories into a list, or recursively attempt to rmed them.








Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]