cp ou mv arquivos para o mesmo diretório em que eles já estão quando estou em outro?

11

Se eu estiver em ~/blob e tiver um arquivo em ~/blob/a_long_directory_name/c/x.x

Eu posso digitar

mv blob/a_long_directory_name/c/x.x blob/a_long_directory_name/even_more/y.y

Existe algum atalho pelo qual eu possa digitar algo mais curto que use o caminho do diretório no primeiro parâmetro (não o meu diretório atual), por exemplo,

mv blob/a_long_directory_name/c/x.x $same_dir/y.y

em que algo como $same_dir apontaria para o diretório do parâmetro 1

    
por Michael Durrant 05.09.2013 / 18:54

3 respostas

8

Para minimizar a quantidade de digitação, provavelmente é mais fácil fazer isso em duas etapas. CD para o diretório e, em seguida, mova-se.

Se você tiver apenas um comando, poderá usar um subshell:

$ (cd blob/a_long_directory_name/c/ && mv x.x y.y )

Isso significa que o cd só terá efeito na subzela, o mv só acontecerá se o cd for bem-sucedido e o diretório de trabalho do seu shell atual não mudará.

Se você tiver mais de um comando, use a pilha de diretórios.

$ pushd blob/a_long_directory_name/c/
$ mv x.x y.y
$ mv z.z q.q
$ popd
    
por 05.09.2013 / 19:07
25

Com o bash, você pode usar a expansão de chaves

mv blob/a_long_directory_name/{c/x.x,evenmore/y.y}
    
por 05.09.2013 / 19:47
5

Você pode usar os recursos de substituição de texto do seu shell. Em bash , você poderia usar uma fera como:

mv blob/a_long_directory_name/c/xx !#:$:gs^c/xx^evenmore/yy

Para dividir:

!# é a linha atual digitada até agora

:$ pede para escolher a última palavra (substitua com um número n para escolher n 'palavra) da cadeia sob consideração ( !# neste caso). A última palavra da linha digitada até agora seria a palavra anterior.

:gs^xx^yy faz a substituição textual global ( g ) ( s ) na palavra resultante, substituindo 'xx' por 'yy'. ^ é apenas um delimitador para o comando s para permitir usar / em seus padrões.

Este método é um pouco mais geral, pois permite substituir qualquer parte do caminho ('xx') por qualquer outra palavra ('yy').

Por fim, como em qualquer manipulação de histórico, é bom definir as opções de shell apropriadas (por exemplo, em ~/.bashrc ). Neste caso,

shopt -s histverify

exibe a linha editada depois que você pressiona a devolução, para que você ainda possa editá-la e verificar erros.

Por que você usaria um constructo assim, não tenho certeza, mas funciona neste caso.

    
por 05.09.2013 / 20:05