Um script bash para copiar todos os arquivos de pastas para uma única pasta no Desktop

2

Eu quero um script bash que copie todas as pastas e arquivos na área de trabalho para uma pasta chamada 'new' na área de trabalho. Suponha que, sempre que eu fizer um arquivo na área de trabalho, esse arquivo seja movido automaticamente para a pasta chamada 'novo' na área de trabalho.

    
por codedbrain 05.12.2016 / 20:37

1 resposta

2

Você pode usar a ferramenta útil inoticoming para monitorar sua pasta ~/Desktop para arquivos recebidos e executar automaticamente uma ação em cada evento, como movê-los para um local diferente.

  

Observe que este comando só presta atenção aos arquivos criados ou modificados somente .
  Ele irá ignorar quando você criar um novo diretório lá. Ele também irá ignorar arquivos criados ou modificados em qualquer subdiretório.

     

Eu tentei criar um comando que também reaja nos diretórios, mas isso parece impossível, a menos que você esteja certo com o efeito colateral de copiar diretórios para o local observado falharem aleatoriamente porque inotifywatch move o diretório de destino antes que a cópia de todos os arquivos seja concluída .

inoticoming não vem pré-instalado com o Ubuntu, mas você pode simplesmente instalá-lo uma vez executando

sudo apt-get install inoticoming

Então você digita esse comando abaixo e vê a mágica acontecer:

inoticoming --foreground --initialsearch ~/Desktop --chdir ~/Desktop mv -- '{}' ~/Desktop/new  \;

Parâmetros explicados:

  • --foreground faz a ferramenta ser executada em primeiro plano e imprimir informações de log no terminal sempre que ele faz alguma coisa. Isso é bom para testes iniciais e depuração.

    Uma vez que você tenha certeza de que faz o que você quer, você pode omitir este argumento e deixar bifurcar um daemon de fundo, o comando retornará imediatamente e não produzirá nenhuma saída. Você faria isso se quiser autostartar o comando, por exemplo. durante o login. Pode fazer sentido configurar arquivos de log nesse caso, por favor, veja man inoticoming para mais informações sobre isso.

  • --initialsearch realiza uma varredura adicional de todos os arquivos no diretório que já estão presentes quando você inicia o comando. Sem ele, apenas os arquivos criados ou modificados durante a execução são processados.
  • ~/Desktop o diretório para assistir
  • --chdir ~/Desktop altere o diretório de trabalho para ~/Desktop antes de executar a ação especificada toda vez que um arquivo aparecer ou for modificado
  • mv -- '{}' ~/Desktop/new \; do comando de ação real que você deseja chamar em cada evento. {} será substituído pelo nome do arquivo que acionou o evento. Observe como ele é colocado entre aspas simples e precedido por -- para evitar que ele seja dividido ou interpretado por um shell ou como argumento de palavra-chave de mv . O trailing \; indica o final do comando de ação e é obrigatório.

Quando inoticoming está sendo executado no modo de primeiro plano, você pode sair pressionando Ctrl + C no terminal.

Para eliminar seus daemons de segundo plano se você os lançou sem --foreground , o método mais simples é executar killall inoticoming . Tenha em atenção que isto mata todas as instâncias em execução de inoticoming . Se você quer certificar-se de matar apenas uma instância específica, pode fazer sentido deixá-lo armazenar seu PID (ID do processo) em um arquivo. Veja man inoticoming para mais informações sobre isso.

    
por Byte Commander 05.12.2016 / 21:07