Existe uma maneira de desfazer um comando de terminal?

1

Acabei de copiar um diretório inteiro para outro usando

cp ~/local/* ./

e realmente queria digitar

cp ~/local/srl* ./

então estou me fundando com muitos arquivos desnecessários. Eu posso suprimi-los à mão, mas eu queria saber, existe uma maneira de desfazer qualquer comando sobre o termo?

    
por PandaV2 02.09.2015 / 12:23

3 respostas

10

Não, não há como desfazer um comando (pelo menos não universal). Isso geralmente é um problema quando os usuários executam rm com regex incorreto, sem perceber que ele cobre mais arquivos do que gostaria de remover.

Além disso, seria realmente impossível implementar o comando ANY para desfazer o terminal. Imagine o comando que envia um e-mail ou toca algum som. Não há como desfazer isso.

Apenas fique feliz que você executou cp , não rm .

Quanto ao futuro, se você não estiver movendo / removendo / copiando arquivos demais, a opção -i irá transformá-lo no modo "interativo", solicitando confirmação antes de cada ação.

    
por 02.09.2015 / 12:27
3

Não há um modo universal de desfazer um comando como esse. No entanto, desde que você não tenha sobrescrito nenhum arquivo, não é muito difícil usar a lista de arquivos de origem para identificar o conjunto que deve ser removido do destino:

Você acidentalmente executou isso:

cp ~/local/* ./

Então, para encontrar o conjunto de arquivos a serem removidos, algo assim pode ser usado:

for SRC in ~/local/*; do DST="${SRC/*\/}"; echo rm "$DST"; done

(O DST="${SRC/*\/}" retira o caminho da lista de arquivos em ~/local/* , deixando apenas o nome do arquivo.) Quando estiver satisfeito, ele listará o conjunto correto de arquivos, remova o echo do comando e volte a executá-lo.

    
por 02.09.2015 / 12:33
-1

Não, em geral, você não pode desfazer um comando de terminal.

No seu caso específico, você pode excluir facilmente todos os arquivos, exceto estes:

shopt -s extglob
rm !(srl*)
    
por 02.09.2015 / 12:36