Duas substituições acopladas em uma única linha de comando?

0

Isso funciona muito bem:

ls /path/{foo,bar}/

Agora, e se eu quiser efetivamente fazer:

cp /path/foo/bunch/of/stuff/foo.txt /path/bar/bunch/of/stuff/bar.txt

Existe alguma mão curta que eu possa fazer em uma única linha de comando?

Ou seja. meio como cp /path/{foo,bar}/file.txt mas onde existem duas substituições que devem ser feitas simultaneamente?

Efetivamente, quero várias expansões de chaves acopladas que não geram todas as combinações possíveis.

    
por bbum 17.02.2015 / 23:27

2 respostas

2

A substituição pode incluir / :

cp /path/{foo/foo,bar/bar}.txt

é equivalente a

cp /path/foo/foo.txt /path/bar/bar.txt

Uma abordagem alternativa seria pesquisar e substituir; isso funciona desde que "foo" não contenha barras:

set /path/foo/bunch/of/stuff/foo.txt; cp $1 ${1//foo/bar}
    
por 17.02.2015 / 23:28
1

Uma maneira é usar interação histórica , mas para a linha atual ( !# ):

$ echo /path/foo/bunch/of/stuff/foo.txt  !#:1:gs/foo/bar/
echo /path/foo/bunch/of/stuff/foo.txt  /path/bar/bunch/of/stuff/bar.txt
  • !# , como já foi dito, refere-se à linha atual
  • :1 para a primeira palavra
  • :s/foo/bar substitui bar por foo
  • g é um modificador que faz a substituição em toda a linha
por 17.02.2015 / 23:59

Tags