Lista de argumentos muito longa e copiada para o Samba Share

Lista de argumentos muito longa e copiada para o Samba Share

Ubuntu 12.04 LTS 64 bits.

Estou tentando fazer uma cópia de tarefa agendada de um diretório com milhares de arquivos para um compartilhamento de samba (ignorando duplicatas). Mapeei meu compartilhamento Samba através da GUI.

O comando que tentei:

cp /home/security/Brick/* ~/.gvfs/"cam em atm-bak-01.local/Brick" -n

Encontrei isso, mas não sei como alterar a sintaxe para o que preciso.

encontrar -maxprofundidade 1 -name '*.prj' -exec mv -t ../prjshp {} +

Qualquer sugestão é muito apreciada.

Responder1

O problema é que o shell expande sua lista /home/security/Brick/*com uma longa (muito longa) lista de arquivosantespassando para cp.

Se você quiser copiar todo o Brickdiretório, talvez o mais simples seja:

cp -rn /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local"/

usando o sinalizador "recursivo" para cp. Isso também copiará toda a estrutura do Brick (subdiretórios incluídos).

Uma possibilidade é usar um forloop:

for file in /home/security/Brick/*; 
do
cp -n $file ~/.gvfs/"cam on atm-bak-01.local/Brick"
done

Ou usando encontrar:

find /home/security/Brick/ -type f -exec cp -n {} ~/.gvfs/"cam on atm-bak-01.local/Brick" \;

Neste comando, -type fdiz para selecionar apenas arquivos (sem diretórios), então para cada arquivo executa o comando especificado: {}é substituído pelo nome do arquivo, e \;é o ponto e vírgula necessário para fechar a -execcláusula, escapado caso contrário o shell irá interpretá-lo (e remover ).

O comando seguinte -execpode ser o que você quiser (por exemplo, em vez de cp -nvocê pode usar cp -avpara copiar no modo de arquivo (incluindo carimbos de data e hora e propriedade) e sobrescrever, ou você pode usar outros comandos (mas: você deve entender escapes de shell, globbing e cotação antes, caso contrário você pode causar muitos danos --- veja por exemplo"aprendendo a casca").

Find é um comando muito poderoso --- vale a pena ser bem aprendido. Encontrei tutoriais interessantesaqui,aquieaqui.

Sobre fazer um backup com cp -n:

Observe que o -nsinalizador não substituirá os arquivos existentes, portanto, se você fizer alterações em um arquivo em seu diretório local que foi copiado antes, ele iránãoserá copiado novamente... e você terá no backup a versão antiga dele.

Por esse motivo, recomendo usar um utilitário de backup ou sincronização, comoUníssonoousincronizar novamente, para fazer este trabalho. Esses utilitários apenas atualizarão os arquivos alterados, podem minimizar gravações (e, portanto, largura de banda da rede) e geralmente são muito mais seguros. Seu backup pode ser resolvido rsyncsimplesmente dizendo:

rsync -azvv  /home/security/Brick   ~/.gvfs/"cam on atm-bak-01.local/Brick"

(tome cuidado para não adicionar um "/" final no final --- ou o rsync criará um subdiretório Brick/Brick. Sim, rsyncé poderoso e bastante temperamental às vezes.)

O Unison tem uma interface gráfica agradável e também informará se houver alterações conflitantes em seu repositório --- então esta seria minha opção preferida.

informação relacionada