Como posso mover todos os arquivos e pastas de vários diretórios?

1

Então eu estou escrevendo este script bash para fazer todo tipo de coisas, mas o último passo é mover o conteúdo de quatro diretórios diferentes em um único local para que eu possa executar um comando shred ou remover ou algo parecido ). isso é o que eu tenho até agora

for dir in $dir1 $dir2 $dir3 $dir4; do
     mv -vi ./* $CYCL
done

esse loop removeria todos os arquivos e pastas desses diretórios de uma só vez? ou eu teria que mudar isso?

editar: código alterado. havia uma função lá que eu substituí com o código original

    
por user6 19.11.2013 / 22:28

1 resposta

1
  • O caminho conciso:

    mv -vi {$dir1,$dir2,$dir3,$dir4}/* $CYCL
    

    Não sei por que você está usando a opção -i para os arquivos que deseja excluir de qualquer maneira. Você não se importa se algo for sobregravado, apenas adicionando mais etapas manuais.

  • Usando seu loop:

    for dir in $dir1 $dir2 $dir3 $dir4; do
       mv -vi $dir/* $CYCL
    done
    

A sintaxe for var in list; do ; done atribuirá sequencialmente o valor de cada elemento na lista à variável X e, em seguida, executará o que estiver no bloco do . Se você não mencionar a variável que você usou, nada será feito. Por exemplo, isso simplesmente imprimirá "olá" três vezes:

for i in Tom Dick Harry; do echo hello; done
hello
hello
hello

Se você quiser realmente fazer algo aos elementos da sua lista, precisará se referir à variável que você atribuiu a eles:

$ for i in Tom Dick Harry; do echo hello $i; done
hello Tom
hello Dick
hello Harry

Assim, o seu loop estava executando mv ./* $CYCL , o que teria movido o conteúdo do seu diretório atual para qualquer valor de $CYCL . Ele não teria tocado o conteúdo de dirs 1-4 de nenhuma maneira.

    
por terdon 20.11.2013 / 01:36