Сортировка файлов по шаблону

Во-первых, вам нужно указать шаблон для sed. Затем вам нужно избежать точки, чтобы она воспринималась буквально. Таким образом, попробуйте это:

echo fooap.p | sed 's/\.p//'

Последнее gв вашем коде лишнее.

0
15.10.2020, 11:01
1 ответ

Сzsh(ваш скрипт уже имеет синтаксис zsh, а не bash, так как вы не цитируете расширения параметров):

autoload zmv # best in ~/.zshrc

zmodload zsh/files # makes mkdir and mv (and a few other file manipulation
                   # utilities) builtin to speed things up.

mkmv() { mkdir -p -- $2:h && mv -- "$@"; }

(
  cd -P -- "$FILES" &&
    zmv -P mkmv '([A-Z0-9](#c4))_*.dlg' '$1/$f'
)

Где [A-Z0-9](#c4)соответствует 4 английским заглавным буквам (и в zsh, только им, а не Ŕ, Æ, и т. д., которые обычно включают другие оболочки )или десятичные цифры (и опять же, только они, а не ², , ... которые, например, bashбудут включать ).

Обратите внимание, что ваш [0-9]*_*.dlgявляется не регулярным выражением, это подстановочный знак оболочки, который соответствует именам файлов, начинающимся с одного символа в диапазоне от 0до 9(, который in bashвключает сотни символов в большинстве локалей ), за которыми следует любое количество символов (*), за которыми следует _, за которым следует любое количество символов, за которыми следует .dlg. Эквивалент регулярного выражения будет ^[0-9].*_.*\.dlg$.

2
18.03.2021, 22:57

Теги

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