Executa um lote de comandos do servidor em um único arquivo

1

Como posso executar comandos simples como

cp -pr /scripts/htdocs/sob/summaries/* /scripts/htdocs/sob/summaries.prod

cp -p /scripts/htdocs/sob/summaries/index.php /scripts/htdocs/sob/summaries.prod/index.php

rm -R cake.old nbproject

com uma única chamada de comando?

    
por Webnet 04.05.2011 / 22:01

5 respostas

5

Coloque o seguinte em command.sh :

#!/bin/bash
cp -pr /scripts/htdocs/sob/summaries/* /scripts/htdocs/sob/summaries.prod
cp -p /scripts/htdocs/sob/summaries/index.php /scripts/htdocs/sob/summaries.prod/index.php
rm -R cake.old nbproject

Em seguida, torne esse arquivo executável:

$ chmod +x command.sh

Em seguida, execute:

$ ./command.sh
    
por 04.05.2011 / 22:05
4

Se você acabou de copiar / colar isso, separe os comandos com ponto e vírgula.

cp -pr /scripts/htdocs/sob/summaries/* /scripts/htdocs/sob/summaries.prod; cp -p /scripts/htdocs/sob/summaries/index.php /scripts/htdocs/sob/summaries.prod/index.php; rm -R cake.old nbproject

Note que o primeiro comando que você postou irá copiar o arquivo index.php, então é desnecessário executar sua segunda cópia diretamente depois disso.

    
por 04.05.2011 / 22:05
2

Você pode separá-los com ponto-e-vírgula, como os outros disseram, ou com "e" comercial duplo (& &) assim:

cp -pr /scripts/htdocs/sob/summaries/* /scripts/htdocs/sob/summaries.prod && cp -p /scripts/htdocs/sob/summaries/index.php /scripts/htdocs/sob/summaries.prod/index.php && rm -R cake.old nbproject

A diferença é que, com o E comercial, cada comando será executado somente se o anterior for concluído com sucesso, enquanto com o ponto e vírgula todos os comandos serão executados, independentemente dos anteriores.

    
por 04.05.2011 / 22:21
2

Você deve usar rsync em vez de cp, pois é mais eficiente se algum dos arquivos ou diretórios permanecerem iguais entre as execuções. O rsync também lida com coisas como links simbólicos e esquisitices, como arquivos esparsos, melhor que cp. Use um editor de texto (pico é bom começar com) e crie o seu arquivo ~ / script.sh (esta versão também tem alguma verificação de erros):

#!/bin/bash
rsync -av /scripts/htdocs/sob/summaries/* /scripts/htdocs/sob/summaries.prod || \
  { echo "rsync failed" >&2 && exit 1; };
rm -rf /somedir/cake.old /somedir/nbproject || { echo "rm -rf failed" >&2 && exit 1; };

Salve esse arquivo e execute chmod 755 script.sh para torná-lo executável. Em seguida, digitar ~/script.sh executará seu script.

Observe que você deseja colocar um diretório absoluto nesse comando rm -rf para não apagar acidentalmente o diretório errado em algum outro local. Eu também eliminei sua segunda cópia, já que está coberta na primeira cópia recursiva.

rm -rf é um idioma mais padronizado que rm -R . O -f força a remoção de arquivos / diretórios, mesmo que as permissões o proíbam (mas apenas para arquivos ou diretórios que você já possui).

    
por 05.05.2011 / 03:57
1

Você pode separá-los com ponto e vírgula ou colocá-los em um script, marcá-los como executáveis e apenas chamar o script.

    
por 04.05.2011 / 22:04