[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#10802: rmdir -p behaviour

From: Jim Meyering
Subject: bug#10802: rmdir -p behaviour
Date: Tue, 14 Feb 2012 16:53:40 +0100

Paul Ruane wrote:
> If I have the following directory structure:
>> mkdir -p a/a1 a/a2
> If I then remove these empty directories using the --parents option,
> rmdir reports an error:
>> rmdir --parents a/a1 a/a2
> rmdir: failed to remove directory `a': Directory not empty
> Despite the error, the command completes with the desired result.
> It is pretty obvious what is happening: rmdir is treating each
> argument in isolation:
> 1. argument 'a/a1'
>     1.1. attempt to remove 'a/a1': success
>     1.2. attempt to remove 'a': error as directory not empty
> 2. argument 'a/a2'
>     2.1. attempt to remove 'a/a2': success
>     2.2. attempt to remove 'a': success
> However I would expect the parent directory removal to happen after
> the arguments are removed, which would result in a better user
> experience. For example:
> 1. argument 'a/a1'
>     1.1. attempt to remove 'a/a1': success
>     1.2. remember parent 'a'
> 2. argument 'a/a2'
>     2.1. attempt to remove 'a/a2': success
>     2.2. parent 'a' already in set of parents
> 3. remembered parent 'a'
>     3.1. remove parent 'a': success

Thanks for the suggestion.
However, while in your case it appears to require little work,
in general, it is probably not worth the added complexity.

Imagine a command like this:

  rmdir --parents a/b ... many-other-arguments ... a/c

That means we'd have to defer removing a/ until the last argument,
and to know that we need to handle this unusual case, we'd have to
inspect each of the intervening arguments.

Now, consider this:

  rmdir --parents a/b b/x ... many-other-arguments ... a/c b/y

Now we have to search for both a/ and b/-prefixed arguments.
And what if we have this?

  rmdir --parents a/b/c ... many-other-arguments ... a/b/d

Now we have to defer not just the removal of a/, but also the removal of a/b/.

Instead, if you really want to avoid that diagnostic when using --parents,
how about runing one rmdir process per argument when two or more share a
leading directory?

reply via email to

[Prev in Thread] Current Thread [Next in Thread]