shopt -s nullglob
set -- Task1/*.PDF
if (( $# > 0 )); then
printf 'There are %d PDF files in "Task1"\n' "$#"
else
echo 'There are no PDF files in "Task1"'
fi
Набор
установит позиционные параметры для имен отдельных файлов PDF, доступных в подкаталоге Task1
. Это то же самое, как если бы вы вызвали сценарий с ./ script Task1 / *. PDF
.
Количество позиционных аргументов содержится в $ #
, и мы проверяем, больше ли оно нуля. Если это так, мы сообщаем количество доступных PDF-файлов. В противном случае мы сообщаем, что их нет. Вы можете делать все, что хотите, вместо этих двух действий.
Если задача состоит в том, чтобы просто ввести суффикс .PDF
в нижний регистр любого такого файла, то нет необходимости сначала проверять, есть ли они:
shopt -s nullglob
for fpath in Task1/*.PDF; do
mv "$fpath" "${fpath%.PDF}.pdf"
done
Установка оболочки nullglob
опция гарантирует, что мы не получим значение *
в fname
, если не было никаких файлов, соответствующих шаблону.
Установите стиль tag-order
следующим образом
zstyle :completion::complete:-command-:: tag-order local-directories -
Тег local-directories
доступен только при autocd
опция включена. -
указывает zsh отбрасывать любые возможные совпадения в других тегах
s
Вы также можете найти стиль insert-tab
; поэтому, когда $BUFFER
пуст, он все равно будет заполнять файлы в текущем каталоге.
zstyle ':completion:*' insert-tab false
Чтобы ответить на ваш вопрос (, даже если я не уверен, что вижу его цель ), и ответить на комментарии, следующие за ним, есть способ завершить только по имени файла без потери нормального завершения.Вы можете связать завершение имени файла с клавишей (здесь Ctrl+F):
zstyle ':completion:files:*' completer _files
zstyle ':completion:files:*' file-patterns '*:all\ files'
zstyle ':completion:files:*' hidden all
zle -C files menu-complete _generic
bindkey '^F' files
Может быть полезно установить autocd и добавить псевдонимы суффиксов, например:
alias -s pdf="zathura"
alias -s jpg="sxiv -f"
alias -s tex="vim"
setopt autocd