Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Some problems with recursive globbing
- X-seq: zsh-users 20186
- From: Jesper Nygårds <jesper.nygards@xxxxxxxxx>
- To: Zsh Users <zsh-users@xxxxxxx>
- Subject: Some problems with recursive globbing
- Date: Thu, 7 May 2015 16:35:57 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=6JFYuth2mVrHB8D5gZVyaBcM/YaplQvkEIlt5nHtsJM=; b=mblHcpXpAj48UQ48UOF2pEBC6RxK4Pc5Lp3PrM0OIcIFM+mvogL3aVYMHPMUeDqmiA 7x5QzsOLoahih27UsZ1oaIAJ4OFiZ+cRIbCRz3Ibmy5hf8zqGKUS13FirFvgC1kQ/IkD mjhJxC+4NMH5+Qd41IeoHjRM+56PPI6AthYuEZpwT7KzW6U0dP3F3UZIWkO3QRiNRxi0 y77MGqhqMx24LjggwpS0gY/k+mHG6WKdKuzQh62awQYIkx6pKxkLMdYSrK93IXWLyynP o5Rv/Secd8mvlinbT1xzJZl7EK0OR1mFWvzRjrEkwacQ6RNdaozc5V9zOobOGlvNp140 hiHw==
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
I am trying to write a function where I collect files within a file tree to
do some processing.
My goal is to find all files which are not in any directory called
'target', at any level.
Here's a simplified version of my function:
myfiles() {
setopt LOCAL_OPTIONS EXTENDED_GLOB
local dir
[[ -n $1 ]] && dir=${1:a}/
local filepattern="${dir}**/*~${dir}(**/|)target(/**/*|/*|)"
print -c ${~filepattern}
}
So this prints out the relative paths of all files in the current
directory. If a directory is given as an argument, the absolute paths are
printed of files within the given directory. (I know there's no check that
the argument is actually a directory).
This works, sort of, but I have a question and a problem.
Question: I found it surprisingly difficult to to find a glob pattern that
excluded target directories and their contents at all levels. Have I
complicated this too much, is there an easier way to express this glob?
Problem: I can't get this to work for both cases of a) directories with
spaces in their names and b) directories with parenthesis in their names
Suppose I'm standing in a directory called "/tmp/test(1)", and this
directory contains a directory called "src".
% myfiles src
I get this:
myfiles:9: no matches found:
/tmp/test(1)/src/**/*~/tmp/test(1)/src/(**/|)target(/**/*|/*|)
If I change the fifth line in myfiles() to this:
[[ -n $1 ]] && dir=${(q)1:a}/
it works for the root directory with parentheses. However, standing in a
directory called "/tmp/test 1", I now get this:
myfiles:9: no matches found: /tmp/test\ 1/src/**/*~/tmp/test\
1/src/(**/|)target(/**/*|/*|)
So with quoting, it works with parentheses. Without quoting, it works with
spaces. It feels as though I've tried everything, but I can't find a way to
quote this so that it works for both parentheses and spaces.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author