Qual é a maneira mais fácil em * nix para curingar uma substring de um nome de arquivo?

3

Eu quero fazer algo como pegar a parte de uma correspondência de caractere curinga e usá-la de maneira semelhante a uma correspondência de expressão regular. O comando pode ser algo parecido com isto

cat foo_* | python magic.py > magic_*

Se os nomes dos meus arquivos forem

   foo_biz
   foo_baz

Eu quero que a saída esteja em arquivos nomeados

   magic_biz
   magic_baz

mudando efetivamente os nomes dos arquivos de foo_* para magic_* .

É possível fazer isso em um comando shell? Estou usando bash , mas uma resposta para outros shells também é boa.

    
por spinning_plate 16.05.2012 / 19:49

3 respostas

5

Se eu entendi o que você está tentando fazer, é possível realizar isso, mas é preciso um pouco mais de trabalho:

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

(Observação: eu também substituí o uso inútil de cat com um < de redirecionamento. )

    
por 16.05.2012 / 20:25
1

Algo um pouco diferente da excelente resposta de Gordon:

foos=(foo_*)
suffixes=(${foos[@]#foo_})
for sfx in "${suffixes[@]}"; do
    python magic.py < "foo_$sfx"  > "magic_$sfx"
done
    
por 16.05.2012 / 21:18
0
$ touch foo_{biz,baz}

$ ls foo_*
foo_baz  foo_biz

$ printf "%s\n" foo_* | sed 's/^foo_/magic_/'
magic_baz
magic_biz
    
por 16.05.2012 / 19:54

Tags