2
比方說,我有一堆文件,其中一個文件有.txt
作爲擴展名,其他文件有.x.txt
,其中x可以是任何。如何取出只有.txt
擴展名的文件?如何在zsh中指定與file.txt匹配但不匹配file.x.txt的glob?
這裏有一個重複的例子:
touch file.txt file.x.txt
echo *.txt
# file.txt file.x.txt
比方說,我有一堆文件,其中一個文件有.txt
作爲擴展名,其他文件有.x.txt
,其中x可以是任何。如何取出只有.txt
擴展名的文件?如何在zsh中指定與file.txt匹配但不匹配file.x.txt的glob?
這裏有一個重複的例子:
touch file.txt file.x.txt
echo *.txt
# file.txt file.x.txt
% touch file.txt file.x.txt
% echo [^.]#.txt
file.txt
從man zshexpn
的FILENAME GENERATION
部分:
[...] Matches any of the enclosed characters. Ranges of characters can be specified by separating two characters by a `-'. A `-' or `]' may be matched by including it as the first character in the
list. There are also several named classes of characters, in the form `[:name:]' with the following meanings. The first set use the macros provided by the operating system to test for the given
character combinations, including any modifications due to local language settings, see ctype(3):
...
[^...]
[!...] Like [...], except that it matches any character which is not in the given set.
...
x# (Requires EXTENDED_GLOB to be set.) Matches zero or more occurrences of the pattern x. This operator has high precedence; `12#' is equivalent to `1(2#)', rather than `(12)#'. It is an error for
an unquoted `#' to follow something which cannot be repeated; this includes an empty string, a pattern already followed by `##', or parentheses when part of a KSH_GLOB pattern (for example,
`!(foo)#' is invalid and must be replaced by `*(!(foo))').
因此,這與.txt
不包含其他.
字符結尾的字符串相匹配。