tag 24730 notabug thanks On 10/18/2016 02:49 PM, L. A. Walsh wrote: > > It doesn't seem rmdir and mkdir are behaving "reciprocally"... > > If I type > > mkdir -p ./a/b/c # no error . already exists, so mkdir silently does nothing, ./a needs to be created, ./a/b needs to be created, ./a/b/c needs to be created > rmdir -p ./a/b/c # get error msg, but a,b,c removed. ./a/b/c needs to be removed, ./a/b needs to be removed, ./a needs to be removed, . needs to be removed, but you can't do that, hence the error The apparent asymmetry is due to the POSIX rules on how '.' is treated; but we can't change the behavior of either of these commands, because they are both following the POSIX rules. If you want symmetry, omit the leading './', as in: $ mkdir -p a/b/c $ rmdir -p a/b/c > > 1) thinking either rmdir shouldn't generate an error or mkdir should > > mkdir -p a/../b # no error a needs to be created, a/.. already exists, so it silently does nothing, a/../b needs to be created > rmdir -p a/../b # error, but a & b removed a/../b needs to be removed, a/.. needs to be removed, but you can't do that, at this point, POSIX is fuzzy whether to attempt to remove 'a', or to give up since 'a/..' was already an error; but obviously coreutils removes 'a' > > 2) similar comment to above -- leading to: > > for rmdir, if "-p" is used, then as similar to "mkdir -p": > (no error if existing, make parent directories as needed) > > rmdir -p should be > "no error if dir not empty, but directories are followed > and deleted as possible". Sadly, while that might be a nicer definition for 'rmdir -p', it doesn't match the POSIX requirements nor the historical behavior, so we can't really change it now. So I'm marking this as not a bug, as there is nothing to change. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org