Digamos que eu tenho um arquivo /templates/apple
e quero
- colocá-lo em dois lugares diferentes e depois
- remova o original.
Então, /templates/apple
será copiado para /templates/used
AND /templates/inuse
e depois disso eu gostaria de remover o original.
É cp
a melhor maneira de fazer isso, seguida por rm
? Ou há uma maneira melhor?
Eu quero fazer tudo em uma linha, então estou pensando que seria algo como:
cp /templates/apple /templates/used | cp /templates/apple /templates/inuse | rm /templates/apple
Essa é a sintaxe correta?
Por que não o
cp
local 1 e depois omv
local 2. Isso cuida da "remoção" do original.E não, não é a sintaxe correta.
|
é usado para "canalizar" a saída de um programa e transformá-la em entrada para o próximo programa. O que você quer é;
, que separa vários comandos.Se você precisar que os comandos individuais DEVEM ter sucesso antes que o próximo possa ser iniciado, use
&&
:Dessa forma, se um dos
cp
comandos falhar, orm
não será executado.fonte
Note que
cp A B; rm A
é exatamentemv A B
. Também será mais rápido, como você não precisa copiar os bytes (assumindo que o destino esteja no mesmo sistema de arquivos), apenas renomeie o arquivo. Então você quercp A B; mv A C
fonte
Outra opção é digitar Ctrl+V Ctrl+Jno final de cada comando.
Exemplo (substitua
#
por Ctrl+V Ctrl+J):Resultado:
Isso executará os comandos, independentemente se os anteriores falharam.
Igual a:
echo 1; echo 2; echo 3
Se você deseja interromper a execução em comandos com falha, adicione
&&
no final de cada linha, exceto a última.Exemplo (substitua
#
por Ctrl+V Ctrl+J):Resultado:
Em
zsh
você também pode usar Alt+Enterou em Esc+Entervez deCtrl+V Ctrl+Jfonte
Tente isso ..
cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple
fonte
Usar cachimbos me parece estranho. De qualquer forma, você deve usar o
and
operador lógico Bash:Se os
cp
comandos falharem, orm
não será executado.Ou, você pode criar uma linha de comando mais elaborada usando um
for
loop ecmp
.fonte