Здесь проще со стандартными подстановочными знаками:
find ~ -name '*???.[pP][dD][fF]'
Или с некоторыми find
реализациями (те, которые поддерживают -regex
, также поддерживают-iname
):
find ~ -iname '*???.pdf'
Для произвольного количества символов вместо 3
вы можете предпочесть вернуться к -iregex
, где доступно (, см. ответ @Stephen Kitt ), или вы можете использовать zsh
или ksh93
шарики:
zsh
:
set -o extendedglob # best in ~/.zshrc
printf '%s\n' ~/**/?(#c3,).(#i)pdf(D)
((D)
для учета скрытых файлов и файлов в скрытых каталогах, напримерfind
)
(#cx,y)
является подстановочным знаком zsh
, эквивалентным регулярному выражению {x,y}
(#i)
для регистронезависимых ?
стандартный подстановочный знак для любого одиночного символа (например регулярное выражение.
)**/
:любой уровень подкаталогов (включая 0)ksh93
:
FIGNORE='@(.|..)' # to consider hidden files
set -o globstar
printf '%s\n' **/{3,}(?).~(i:pdf)
@(x|y)
:расширенный оператор подстановки ksh, аналогичный регулярному выражению (x|y)
. FIGNORE
:специальная переменная, которая определяет, какие файлы игнорируются глобусами. Когда установлено, обычное игнорирование скрытых файлов не выполняется, но мы по-прежнему хотим игнорировать записи каталога .
и ..
, где они присутствуют. {x,y}(z)
является ksh93
эквивалентом регулярного выражения z{x,y}
. ~(i:...)
:случай -нечувствительное сопоставление. Подстановочные знаки имеют некоторые дополнительные преимущества по сравнению с find
здесь в том, что вы получаете отсортированный список (вы можете отключить эту сортировку в zsh
с помощью квалификатора oN
подстановочных знаков или использовать другие критерии сортировки ), а также работать, когда имена файлов содержат последовательность байтов, которые не образуют допустимые символы (, например, в локали, использующей кодировку UTF -8, подход find
не сможет сообщить $'St\xE9phane Chazelas - CV.pdf
как \xE9
не являясь символом, не соответствует регулярному выражению .
или подстановочному знаку ?
или *
с GNUfind
).
Я по незнанию обновил системную версию Python, которая вызвала эту ошибку.
Поэтому при обновлении Python никогда не используйте make install
, а используйте make altinstall
.
Таким образом, проблема была решена после переустановки ОС.
Причина появления этого сообщения во многом зависит от вашего файла requirements.txt. Можете ли вы создать очень урезанную версию, которая не требует ничего, кроме одного пакета? Вот так:
#
# most minimalistic requirements.txt file
#
black
Затем запустите pip install -r requirements.txt
с этим файлом.