Estou criando um script simples que copia todos os arquivos do DIRECTORYA que não existem no DIRECTORYB. Estou fazendo isso através do uso do comando cp:
cp -u DIRECTORYA/* DIRECTORYB
O que eu gostaria de fazer também é enviar um email para um administrador que listará os arquivos que foram copiados.
Então, idealmente, antes de executar o comando acima, gostaria de obter os arquivos que serão copiados e armazená-los em uma variável para uso posterior ao criar minha mensagem de email.
Alguém pode me apontar na direção certa? Eu olhei para usar grep, mas não acho que isso possa ser feito com o comando cp?
-v
bandeira para imprimir os nomes de arquivos à medida que são copiados? Redirecione para um arquivo ou diretamente em uma variável e use-a para criar sua mensagem.cp
comando possui a opção--attributes-only
que permite não copiar dados dos arquivos, mas apenas a estrutura de diretórios e arquivos.variable=$(cp -v ...)
captura o stdout do cp. Veja gnu.org/software/bash/manual/html_node/Command-Substitution.htmRespostas:
Eu não acho que o GNU
cp
tenha algo para ajudá-lo se você quiser ver o que faria sem agir. Se você deseja registrar os arquivos que foram modificados, pode usar a-v
opção:Em vez de
cp
, você pode usar o rsync , que é muito mais poderoso e instalado em quase todos os lugares, exceto nos sistemas embarcados de baixo custo (e fácil de instalar onde não está presente por padrão).ou
fonte
Se você quiser executar
cp foo*bar whatever
, executeecho foo*bar whatever
.fonte
cp -u
e ele está procurando uma opção semelhante à corrida a seco para o cp.De acordo com a página do manual ,
esse é um recurso que combina dois testes, um trivial para implementar em um script ( ausente ) e outro que exige algum trabalho ( mais recente ). Você pode criar um script que relate o que é necessário usar
comm
,diff
etest
.Nenhum dos
cp
utilitários padrão oferece a capacidade de executar uma operação de cópia a seco. Como sugerido,rsync
é a maneira de fazer isso com um utilitário comumente disponível. Obviamente,rsync
geralmente é usado para copiar com base em mais critérios do que apenas mais novos ou ausentes (o tamanho do arquivo e os carimbos de data e hora também são usados). Mas pode ser reduzido a fazer apenascp -u
.Para utilitários fora do padrão, existe o
copy
utilitário que escrevi (e, é claro, ainda uso) no final dos anos 80. Provavelmente foi inspirado pelomake
utilitário, pois a primeira opção que adicionei foi-n
.Para o exemplo dado, seria usado assim:
Leitura adicional:
copy - utilitário de cópia de arquivo / diretório
registro de alterações desde agosto de 1988 :
fonte
Você pode usar o comando diff. Eu tenho um trabalho que copia alguns arquivos de backup todos os dias. algum tempo eu preciso verificar se todos os arquivos foram copiados, aqui está a sintaxe:
e, claro, se você quiser copiá-los, use:
fonte
Considere usar o rsync. O Rsync funciona perfeitamente bem em cópias locais e certamente pode fazer o que você deseja, depois de percorrer as quinze bilhões de opções disponíveis.
mostrará tudo o que seria feito e
vai fazer isso.
fonte