Combinando vários comandos em uma única linha

5

Eu tinha um diretório chamado myname , que foi arquivado em myname.tar . Agora quero retirar myname.tar , desarquivá-lo e excluir todos os arquivos no diretório myname (após o desarquivamento).

Aqui estão os meus comandos para a tarefa acima:

find -name deleteme.tar
tar -xvf deleteme.tar
rm -r delete/*

Estes comandos individuais estão funcionando bem, mas eu preciso de um comando de uma linha, então eu tentei isso:

find -name deleteme.tar | tar -xvf deleteme.at | rm -r delete/*

Eu recebi este erro:

"rm -r deleteme/*
rm: cannot remove 'deleteme/*': No such file or directory "

O que estou fazendo de errado?

    
por Michael Mrozek 10.09.2012 / 22:19

2 respostas

18

Os símbolos que você está procurando são chamados operadores de controle . Você está usando os errados - você precisa de ; ou && .

Com ; , os comandos são executados em ordem e não importa se o anterior terminou com sucesso ou não.

Com && , todos os comandos que falharão impedirão que os próximos sejam executados.

Você pode ler mais por exemplo aqui: link

    
por 10.09.2012 / 23:38
5

Caso você esteja usando o bash, sugiro que você leia a man page do bash ( man bash ), e procure por "control operator" ( / operador de controle + [ Digite] ).

Lá, as diferentes funções de coisas como | e ; são explicadas.

Você pode querer usar && em vez de ; . Se você fizer isso, poderá executar as seguintes funções nessa sequência somente se a anterior tiver sido bem-sucedida. Ou seja, se find não puder encontrar seu arquivo, ele não tentará compactar nada :

find -name deleteme.tar && tar xvf deleteme.tar && rm -r delete/* || echo "something went wrong" 1>&2

Apenas uma pequena sugestão, embora ...

    
por 10.09.2012 / 23:34

Tags