With ksh
, bash -O extglob
and zsh -o kshglob
only:
test_file-+([[:digit:]])-master.tar.gz
In bash
, you have to set the extglob
option first. This +(...)
matches one or more occurrences of the given patterns. [:digit:]
when inside a [...]
bracket expression is a POSIX defined character class which includes Indo-Arabic decimal digits ([[:digit:]]
is the same as [0123456789]
or [0-9]
).
It will match:
test_file-1234-master.tar.gz
test_file-1-master.tar.gz
test_file-123456789-master.tar.gz
It will not match:
test_file-1b-master.tar.gz
test_file--master.tar.gz
test_file-a1-master.tar.gz
test_file-abcd-master.tar.gz
test_file-Ⅵ-master.tar.gz # roman numeral
test_file-٨-master.tar.gz # Eastern Arabic decimal digit
The tar
command in your question should then be done like this (with a loop):
shopt -s extglob # bash
# setopt kshglob # zsh
for f in test_file-+([[:digit:]])-master.tar.gz; do
tar xf "$f"
done
The more idiomatic short syntax in zsh
is:
setopt extendedglob
for f (test_file-[0-9]##-master.tar.gz) tar xf $f
(#
being the extendedglob equivalent of regexp *
, and ##
or +
).
test_file-[0-9]*-master.tar.gz
– cas yesterdaytest_file-[0-9][0-9][0-9][0-9]-master.tar.gz
then. – cas yesterday