Какой самый простой способ в * nix подстановить подстроку имени файла?

3

Я хочу сделать что-то вроде участия подстановочного совпадения и использовать его аналогично регулярному выражению. Команда может выглядеть примерно так

cat foo_* | python magic.py > magic_*

Если мои имена файлов

   foo_biz
   foo_baz

Я хочу, чтобы вывод был в файлах с именем

   magic_biz
   magic_baz

эффективно изменяя имена файлов с foo_*на magic_*.

Возможно ли сделать это в команде оболочки? Я использую bash, но ответ для других оболочек тоже подойдет.

spinning_plate
источник

Ответы:

5

Если я понимаю, что вы пытаетесь сделать, вы можете сделать это, но это займет немного больше работы:

for f in foo_*; do python magic.py <"$f" >"${f/foo/magic}"; done

(Примечание: я также заменил бесполезное использование кошки с <переадресацией.)

Гордон Дэвиссон
источник
1

Что-то немного отличающееся от отличного ответа Гордона:

foos=(foo_*)
suffixes=(${foos[@]#foo_})
for sfx in "${suffixes[@]}"; do
    python magic.py < "foo_$sfx"  > "magic_$sfx"
done
chepner
источник
0
$ touch foo_{biz,baz}

$ ls foo_*
foo_baz  foo_biz

$ printf "%s\n" foo_* | sed 's/^foo_/magic_/'
magic_baz
magic_biz
Гленн Джекман
источник