Programar para arquivos de fila para copiar / mover / excluir no linux?

9

Eu pesquisei na rede por uma resposta do Linux a algo como o Teracopy (Windows) ... mas não consegui encontrar nada adequado.

As coisas mais próximas que eu tenho são:

  • Krusader. Mencionado em suas características, mas indicado como "não implementado ainda".
  • MiniCopier. Um aplicativo baseado em java link
  • rsync não é uma opção.

Alguém pode me recomendar uma ferramenta simples de cópia de arquivos que pode enfileirar arquivos para copiar / mover / excluir? De preferência, se eu posso arrastar e soltar do Nautilus.

Se algo assim não existe, alguém pode me dizer por quê? ... sou a única pessoa que precisa de algo assim?

    
por koss 08.09.2009 / 15:59

7 respostas

3

Acabei de escrever este script simples, que chamei de 'cpw', para resolver este problema.

Você o usa exatamente como você usaria cp ... a única diferença é que ele constrói uma matriz de qualquer processo cpw que já esteja rodando quando é iniciado, e espera que eles terminem antes de passar os comandos para cp . Desta forma, ele se comporta como uma fila auto-organizada.

Você pode continuar adicionando trabalhos em background cpw, mas eles não interferem uns nos outros. Eles vão executar um de cada vez.

Tenho certeza de que outras pessoas podem sugerir melhorias.

#!/bin/bash

cpwpids=('ps -ef | grep $USER | grep 'cpw' | grep -v grep | grep -v $$ | awk '{ print $2 }'') #build an array of all cpw procs for this user that aren't this one.

cpwcnt=${#cpwpids[@]} # number of elemenets in the above array
cnt=$cpwcnt # counter to be decremented each pass
while [ $cnt -gt 0 ]
do
    cnt=$cpwcnt
    for i in "${cpwpids[@]}" # check if each pid has died yet
    do
        ps --pid $i >/dev/null
        if [ $? -gt 0 ]
        then
            let "cnt -= 1"
        fi
    done
    sleep 2
done
cp -v "$@" >> /tmp/cpw.log #log

Exemplo de uso:

$ cpw -R /src/tree /dest/tree &
    
por 12.02.2011 / 23:16
1

Na minha experiência, fazer algumas cópias simultaneamente no Linux realmente não reduz o throughput geral. Minha medição de taxa de transferência é baseada no argumento -P do rsync. Meu caso específico é copiar separadamente várias pastas cheias de arquivos grandes de um disco rígido USB ao mesmo tempo.

Então, a menos que você copie muitas coisas de uma vez, você deve estar bem.

    
por 09.09.2009 / 02:03
1

Como o roteiro dado por Josh Arenberg pode ter alguns problemas (que eu não experimentei até agora, mas também não investiguei), eu escrevi algo por conta própria. Não deve ter problemas de deadlocking. Ele também funciona para qualquer comando shell, não apenas cp.

Contents of ~/bin/q

#!/bin/bash

#this waits for any PIDs to finish
anywait(){

    for pid in "$@"; do
        while kill -0 "$pid" 2&>1 >/dev/null; do
            sleep 0.5
        done
    done
}


PIDFILE=~/.q.pid

#open PIDFILE and aquire lock
exec 9>>$PIDFILE
flock -w2 9 || { echo "ERROR: flock() failed." >&2; exit 1; }

#read previous instances PID from PIDFILE and write own PID to PIDFILE
OLDPID=$(<$PIDFILE)
echo $$>$PIDFILE

#release lock
flock -u 9

#wait for OLDPID
anywait $OLDPID

#do stuff
"$@"


#afterwards: cleanup (if pidfile still contains own PID, truncate it)
flock -w2 9 || { echo "ERROR: flock() failed." >&2; exit 1; }
if [ $(<$PIDFILE) == $$ ]; then
truncate -s0 $PIDFILE
fi
flock -u 9

Cria uma cadeia de processos, cada um esperando pelo anterior. Se um processo no meio da corrente trava enquanto espera (improvável mas não impossível), a corrente é quebrada e ambas as partes correm em paralelo. O mesmo acontece se um dos processos for morto.

Uso assim:

q $COMMAND $ARGS

ou até mesmo

q $COMMAND $ARGS; $ANOTHER_COMMAND $MORE_ARGS

Teste, por exemplo digitando

q sleep 10 &
q echo blubb &

e achando que depois de 10 segundos o blubb é impresso.

    
por 07.10.2014 / 16:15
1

Ultracopier é o que você quer, com o Nemo plugin ou plugin do Nautilus .

    
por 16.07.2015 / 12:08
0

Eu não sei nada disso para o Linux (embora isso não signifique que não exista algum em algum lugar). O software Linux tende a ser escrito por usuários do Linux. Usuários experientes do Linux podem não pensar em criar uma ferramenta como essa, porque se perceberem alguma lentidão nas cópias durante uma sessão de interface gráfica, provavelmente mudarão para um terminal e copiarão via linha de comando.

Aqui estão alguns utilitários básicos de cópia de linha de comando que são muito rápidos e não devem afetar o ambiente de área de trabalho:

  • cp ("cp foo / caminho / para / bar" copia foo para bar)
  • mv ("mv foo / caminho / para / bar" irá mover (renomear) foo para bar)
  • tar ("tar cf - foo | (cd / caminho / para / arquivo /; tar xf -)" copiará recursivamente um diretório)
  • rsync ("rsync -r foo / path / para / archive /" recursivamente copiará um diretório)
por 08.10.2009 / 20:20
0

Crie uma lista de arquivos e use o SCP para executar a cópia. O legal no linux é que você pode adicionar ao seu arquivo de texto usando echo.

    
por 08.10.2009 / 21:31
0

Eu encontrei este projeto Unix Batch System chamado Task Spooler, que permite colocar as tarefas na fila.

Ou você pode fazer sudo apt-get install task-spooler

Uma vez instalado, você pode simplesmente colocar ts (ou tsp para sistemas Debian / Ubuntu) na frente de qualquer comando shell normal para fazer fila.

Esta página tem muitos exemplos sobre seus usos: link ou você assiste a um vídeo aqui: link

Eu verifiquei e parece estar funcionando como esperado para todos os meus comandos cp .

    
por 28.06.2018 / 03:41

Tags