zsh-users
 help / color / mirror / code / Atom feed
* Re: Finding empty directories
@ 2003-10-23 17:40 Bart Schaefer
  2003-10-23 18:16 ` DervishD
  0 siblings, 1 reply; 5+ messages in thread
From: Bart Schaefer @ 2003-10-23 17:40 UTC (permalink / raw)
  To: zsh-users

[My ISP had a "latency problem" (their words) with mail servers from late
yesterday evening (PST) until a few minutes ago this morning.  I may have
lost some mail as a result, or it may be sitting in queues at the sending
machines waiting to be delivered.  I'm responding to this one by cutting
and pasting from the archives.  Oh -- there's the original, just as I was
about to send ...]

>     I want to test if a directory is empty or not and I've thought
> that I could test for the expansion of dirname/*(DN[1]).
> 
>     Anyway I was wondering if is there a better way of doing that

	dirname(N-/l2)

(That's "ell two" as in "link count is two".)  I suppose if you already
know it is a directory, the (/) is redundant.

In some older versions of zsh you may need to do something funky to get
the parenthesized part to be interpreted as glob qualifiers, because in
those versions qualifiers are interpreted only when a metacharacter is
part of the pattern.

>     I would like to test if a filename correspond to a dangling
> symlink, too. I can find dangling symlinks using **/*(-@), but if I
> just have a file listing, how can I test if a file is a dangling
> symlink or not?

What do you mean by "just have a file listing"?  Except as noted above for
older versions, you can always append a glob qual, as in file(N-@).

> I've found that doing the following test:
> 
>     [[ -h file && ( -r file || -d file ) ]]
> 
>     will only return true for a symlink that really points to a file
> or a directory, and false otherwise, but I'm not sure if this is a
> proper way or if it will fail miserably on some obscure case :? In
> fact, I'm not sure if '-r' and '-d' follow symlinks by default :?

Yes, -r and -d use stat(2) rather than lstat(2), but you probably want

	[[ -h file && ( -f file || -d file ) ]]

You could also do something like

	zmodload zsh/stat
	{ stat +link bar && ! stat +nlink bar 2>/dev/null } >/dev/null


^ permalink raw reply	[flat|nested] 5+ messages in thread
* Finding empty directories
@ 2003-10-23 15:35 DervishD
  0 siblings, 0 replies; 5+ messages in thread
From: DervishD @ 2003-10-23 15:35 UTC (permalink / raw)
  To: Zsh Users

    Hello all :)

    I want to test if a directory is empty or not and I've thought
that I could test for the expansion of dirname/*(DN[1]). If this is an
empty string, then the directory is empty, otherwise it has at least
one file.

    Anyway I was wondering if is there a better way of doing that
using just zsh code, with no external commands (I know I can do a
'find -type d -empty', for example, or 'ls | wc -l', etc...).

    I would like to test if a filename correspond to a dangling
symlink, too. I can find dangling symlinks using **/*(-@), but if I
just have a file listing, how can I test if a file is a dangling
symlink or not? I've found that doing the following test:

    [[ -h file && ( -r file || -d file ) ]]

    will only return true for a symlink that really points to a file
or a directory, and false otherwise, but I'm not sure if this is a
proper way or if it will fail miserably on some obscure case :? In
fact, I'm not sure if '-r' and '-d' follow symlinks by default :?

    Thanks in advance for your help ;)

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736
http://www.pleyades.net & http://raul.pleyades.net/


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-10-26 10:24 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-10-23 17:40 Finding empty directories Bart Schaefer
2003-10-23 18:16 ` DervishD
2003-10-24 14:44   ` Bart Schaefer
2003-10-25 17:55     ` DervishD
  -- strict thread matches above, loose matches on Subject: below --
2003-10-23 15:35 DervishD

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).