Lista de argumentos muito longa e copiando para o Samba Share

1

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 (enquanto pego duplicatas). Eu mapeei minha parte do Samba através da GUI.

O comando que tentei:

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

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

find -maxdepth 1 -name '*.prj' -exec mv -t ../prjshp {} +

Quaisquer sugestões são muito apreciadas.

    
por Copy Run Start 11.11.2013 / 16:05

1 resposta

0

O problema é que o shell expande seu /home/security/Brick/* com uma longa (muito longa) lista de arquivos antes passando para cp .

Se você quiser copiar todo o diretório Brick , talvez a coisa mais direta 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 em Brick (subdiretórios incluídos).

Uma possibilidade é usar um loop for :

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

Ou usando a localização:

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

Neste comando, -type f diz para selecionar apenas os 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 o arquivo -exec cláusula, escapou caso contrário, o shell irá interpretá-lo (e remover).

O comando após -exec pode ser o que você quiser (por exemplo, em vez de cp -n você pode usar cp -av para copiar no modo de arquivo (incluindo registros de data e propriedade) e sobrescrever ou usar outros comandos ( mas : você deve entender escapes, globbing e quotation antes, caso contrário você pode causar muitos danos - veja por exemplo " aprendendo o shell ").

Encontrar é um comando muito poderoso --- vale a pena ser bem aprendida. Eu encontrei tutoriais interessantes aqui , aqui e aqui .

Sobre fazer um backup com cp -n :

Observe que o sinal -n não substituirá os arquivos existentes, portanto, se você fizer alterações de um arquivo no diretório local que foi copiado anteriormente, ele não será 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, como Unison ou rsync , para fazer este trabalho. Esses utilitários apenas atualizam os arquivos alterados, podem minimizar as gravações (e, portanto, a largura de banda da rede), e geralmente são muito mais seguros. Seu backup pode ser resolvido com rsync simplesmente 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 boa interface gráfica e também lhe dirá se há mudanças conflitantes em seu repositório - então essa seria minha opção preferida.

    
por Rmano 11.11.2013 / 20:37