Подстановочный знак для соответствия mypackage*.tar.xz, но не mypackage*fast.tar.xz?

Я использую Таймер Pomodoro , чтобы следить за временем, поскольку он предупреждает меня, когда мне следует сделать перерыв и когда я должен возобновить работу.

Он был разработан, чтобы помочь структурировать ваш рабочий процесс на основе Техники Помидора , поэтому по умолчанию он составляет 25 минут работы с последующим 5-минутным перерывом -. Однако его легко настроить, и вы можете установить продолжительность в соответствии со своими предпочтениями.

Он также поставляется с приятным графическим интерфейсом и доступен в виде пакета Debian под названием gnome -shell -pomodoro .

0
24.05.2020, 11:35
2 ответа

Если версия вашего пакета всегда заканчивается цифрой, вы можете использовать

rm mypackage-*[0-9].tar.xz

... или вы можете использовать аналогичный способ для сопоставления конца номера версии, который исключает совпадение варианта -fastпакета (, может быть, даже простоmypackage-*[!t].tar.xz).

Если это невозможно, то...

Предполагая, что вы используете оболочку, такую ​​как bash, которая позволяет использовать расширенные шаблоны подстановки в стилеksh-(, включенные с помощью shopt -s extglobв bash), вы можете сделать

rm mypackage-!(*-fast).tar.xz

Часть !(*-fast)приведенного выше шаблона подстановки имени файла будет соответствовать любой строке, кроме строк, соответствующих *-fast.

Это также будет работать в оболочке zsh, если для нее установлена ​​опция оболочки KSH_GLOB(setopt KSH_GLOB). С включенным zshрасширенным подстановочным значением(setopt EXTENDED_GLOB)вы можете вместо этого использовать

rm mypackage-^(*-fast).tar.xz

Чтобы дополнительно удалять только обычные файлы, добавьте квалификатор glob (.)в самый конец шаблона подстановки имени файла.

В оболочке shможно использовать

for name in mypackage-*.tar.xz; do
    case $name in (mypackage-*-fast.tar.xz) ;; (*) rm "$name"; esac
done

или,

for name in mypackage-*.tar.xz; do
    case $name in (mypackage-*-fast.tar.xz) continue; esac
    rm "$name"
done

При этом перебираются все имена, соответствующие mypackage-*.tar.xz, пропускаются имена, которые дополнительно соответствуют mypackage-*-fast.tar.xz, а остальные удаляются.

4
18.03.2021, 23:34

Вы можете использовать команду find, но нужно уточнить запрос:

find. -type f -name 'mypackage-*.tar.xz' ! -name 'mypackage-*fast.tar.xz'

Затем вы можете использовать действие -deleteво многих версиях find для удаления найденных файлов:

find. -type f -name 'mypackage-*.tar.xz' ! -name 'mypackage-*fast.tar.xz' -delete
3
18.03.2021, 23:34

Теги

Похожие вопросы