Используя расширенные глобусы:
shopt -s extglob
printf '%s\n' !([[:digit:][:upper:]]?([[:digit:][:upper:]])_[[:digit:]][[:digit:]][[:digit:]][[:digit:]]_+([[:alnum:]]).dat)
это напечатает все имена файлов / каталогов, которые не (!
) соответствуют [[: digit:] [: upper:]]
, за которым следует ноль или один [[: digit:] [: upper:]]
, за которым следуют 4 [[: digit:]]
между _
s и затем один или несколько [[: alnum:]]
перед расширением .dat
.
Если вы хотите выполнять рекурсивный поиск:
shopt -s globstar
shopt -s extglob
printf '%s\n' **/!([[:digit:][:upper:]]?([[:digit:][:upper:]])_[[:digit:]][[:digit:]][[:digit:]][[:digit:]]_+([[:alnum:]]).dat)
В качестве альтернативы, с помощью gnu find
(можно использовать регулярное выражение):
find . -regextype egrep ! -regex '.*/[[:digit:][:upper:]]{1,2}_[[:digit:]]{4}_[[:alnum:]]+\.dat$'
Вы можете использовать два параметра командной строки, чтобы распаковать
, чтобы получить желаемый результат, при условии, что zip-архив не содержит подкаталогов .
unzip -j -d /my-test-site wordpress-4.1.1.zip
Обратите внимание, что если бы ваш zip-архив был в следующем порядке:
foo
├── 1
├── 2
├── 3
├── 4
├── 5
├── 6
├── 7
├── 8
├── 9
└── bar
├── 1
├── 2
├── 3
├── 4
├── 5
├── 6
├── 7
├── 8
└── 9
Использование этой опции означало бы, что файлы, содержащиеся в foo / bar
, уничтожат (заменит содержимое) все файлы, расположенные в foo
. То есть, опция -j
удаляет все пути, относящиеся к расположениям файлов в zip-архиве, и помещает их либо в текущий каталог (по умолчанию), либо в каталог, указанный в -d
опция.
Если в вашем zip-архиве есть подкаталоги, ваш метод будет способом распаковать этот zip-файл.
Вы всегда можете использовать псевдоним команды:
alias wp_unzip='mv wordpress-4.1.1.zip /my-test-site && \
cd /my-test-site && unzip wordpress-4.1.1.zip && \
mv wordpress/* . && rmdir wordpress'