Похоже, что я удалил не все файлы, которые принадлежали неудачной резервной копии. Теперь, когда я их удалил, резервное копирование возобновилось как обычно.
Сzsh
:
set -o extendedglob
one-author() print -rC1 - ~/books/(([^,-]#,)(#c0,1)[^,-]#~'VV. AA.'*)-*(ND:t)
two-authors() print -rC1 - ~/books/([^,-]#,)(#c2)[^,-]#-*(ND:t)
vv-aa-author() print -rC1 - ~/books/'VV. AA.'*(ND:t)
Тогда:
$ one-author
Aristóteles - Metafísica.epub
Sloterdijk, Peter - parque humano.pdf
Zizek, Slavoj - Menos que nada. Hegel y la sombra del materialismo histórico.
$ two-authors
Deleuze, G. Guattari, F. - Mil mesetas.pdf
Marx, K. Engels, F. - Capital I.epub
$ vv-aa-author
VV. AA. - Fenomenología de la percepción. Ensayos sobre Merleau-Ponty.pdf
VV. AA. - Lógica Simbólica.pdf
Приведенные выше операторы глобуса::
#
(эквивалентно регулярному выражению*
)для 0 или более вхождений предыдущего атома (#c<min>,<mac>)
(эквивалентно регулярному выражению{<min>,<max>}
)для минимального и максимального количества вхождений предыдущего атома (обратите внимание, что для x(#c0,1)
мы также можем сделать(x|)
). pattern1~pattern2
:соответствует шаблону 1 и не соответствует шаблону 2. (...)
используется для группировки. (ND:t)
является квалификатором glob, N
дляnullglob
(не сбой, если нет соответствующего файла ), D
дляdotglob
(включает скрытые файлы ), :t
модификатор только для расширения к хвосту(базовому имени )файла. Эти фильтруют имена файлов на основе количества ,
с до первого появления-
(и обработки VV. AA.
специально для одного -автора ).
Если "-"
(, но не" - "
)может встречаться в имени автора, и всегда есть по крайней мере один SPC с обеих сторон -
, который отделяет автора от названия, вы можете изменить его на:
set -o extendedglob
one-author() print -rC1 - ~/books/(([^,]#,)(#c0,1)[^,]#~'VV. AA.'*~*' - '*)' - '*(ND:t)
two-authors() print -rC1 - ~/books/(([^,]#,)(#c2)[^,]#~*' - '*)' - '*(ND:t)
vv-aa-author() print -rC1 - ~/books/'VV. AA.'*(ND:t)
С оболочкой bash
вы можете сделать что-то эквивалентное с:
shopt -s nullglob dotglob extglob
print-tails() {
(( $# == 0 )) || printf '%s\n' "${@##*/}"
}
one-author() {
print-tails ~/books/!(!(?(*([^,]),)*([^,]))|'VV. AA.'*|*' - '*)' - '*
}
two-authors() {
print-tails ~/books/!(!(*([^,]),*([^,]),*([^,]))|*' - '*)' - '*
}
vv-aa-authors() {
print-tails ~/books/'VV. AA.'*
}
С помощью extglob
поддерживается подмножество расширенных глобусов ksh:
*(x)
(как zsh x#
или регулярное выражениеx*
):0 или более x
s. ?(x)
(аналогично zsh (x|)
или x(#c0,1)
или EREx?
):0 или 1 x
. !(x)
(как zsh^x
):все, что не соответствует x
. |
может использоваться для обозначения или . Как эквивалент zsh
's pattern1~pattern2
,мы делаем !(!(pattern1)|pattern2)
.
баш:
declare -a vv one two
for file in *; do
authors=${file%% - *}
case $authors in
'VV. AA.') vv+=("$file") ;;
*) authors=${authors//, /}
IFS=' ' read -ra names <<<"$authors"
(( ${#names[@]} == 1 )) && one+=("$file") || two+=("$file")
;;
esac
done
declare -p one two vv
выходы
declare -a one=([0]="Aristóteles - Metafísica.epub" [1]="Sloterdijk, Peter - parque humano.pdf" [2]="Zizek, Slavoj - Menos que nada. Hegel y la sombra del materialismo histórico.")
declare -a two=([0]="Deleuze, G. Guattari, F. - Mil mesetas.pdf" [1]="Marx, K. Engels, F. - Capital I.epub")
declare -a vv=([0]="VV. AA. - Fenomenología de la percepción. Ensayos sobre Merleau-Ponty.pdf" [1]="VV. AA. - Lógica Simbólica.pdf")
Если вы хотите интерактивное меню:
PS3="Select authorship: "
select category in One Two VV quit; do
case $category in
One) printf "%s\n" "${one[@]}" ;;
Two) printf "%s\n" "${two[@]}" ;;
VV) printf "%s\n" "${vv[@]}" ;;
quit) break ;;
esac
done