Unix: copia arquivos sequencialmente

0
Tanto quanto eu me lembro, há muito tempo atrás eu tenho usado uma coisa dessas: no comando total eu pressionei F2 no diálogo de cópia - adicionei "tarefa de cópia" em uma "fila de cópia". E assim, todos esses arquivos foram copiados seqüencialmente. Existe alguma ferramenta simples para esse enfrentamento "sequencial"?

Editar: eu gostaria de adicionar "tarefas de cópia" à fila dinamicamente.

Exemplo: eu tenho muitos arquivos pesados. Eu entendo o que eu quero copiar o arquivo A. Enquanto o arquivo A está lidando, eu entendo que também devo copiar o arquivo B para algum lugar, mas eu preciso começar a lidar com ele logo após A já ter sido copiado.

    
por MInner 22.01.2013 / 15:59

1 resposta

1

Não sei ao certo o que você quer dizer, esse é o comportamento padrão do comando de cópia ( cp ):

  • Copie muitos arquivos:

    cp *txt *jpg destination_dir
    

Aqui estão alguns exemplos de operações mais complexas:

  1. Copie todos os arquivos lidos de uma lista ( assumindo nomes de arquivos sãos, sem espaços ou caracteres estranhos ):

    while read n; do cp $n destination_dir < file_list.txt
    
  2. Como acima, mas funciona para nomes de arquivos com espaços ou caracteres estranhos:

    while IFS= read -r n; do cp "$n" destination_dir < file_list.txt
    
  3. Encontre todos os arquivos correspondentes a um padrão e copie-os:

    find . -name "*data*" -exec cp {} destination_dir \;
    
  4. Como acima, mas funciona com nomes de arquivos estranhos:

    find . -print0 -name "*data*" | xargs -0 cp -t destination_dir \;
    

Eu ainda não entendo por que você gostaria de fazer isso, mas tudo bem. Para adicionar uma operação de cópia a ser executada após a atual, você pode fazer isso:

  1. Crie uma lista dos arquivos que você deseja copiar. Como você começa com um arquivo, a lista contém apenas um nome de arquivo:

    echo "fileA" > list.txt
    
  2. Comece a copiar o arquivo lendo a lista (como antes, isso pressupõe nomes de arquivos sane , use o exemplo 2 da lista acima se o nome do arquivo puder conter espaços ou caracteres estranhos e não alfanuméricos):

    while read n; do cp -v $n destination_dir < file_list.txt
    
  3. Encontre o próximo arquivo que você deseja copiar e adicione-o à lista:

    echo "fileB" >> list.txt
    

Contanto que você faça o passo 3 antes que a cópia termine, o próximo arquivo será copiado assim que o primeiro for concluído.

Eu simplesmente não entendo porque você simplesmente não lança muitos comandos cp independentes. Você está complicando as coisas sem nenhuma razão, até onde eu sei.

    
por 22.01.2013 / 16:02

Tags