Copie os arquivos que não existem no diretório superior

0

Atualmente conheço como copiar arquivos que não existem no diretório de destino. Isso me permite copiar de src para dst da maneira que eu gostaria.

No entanto, agora eu quero copiar de src para dst/2016-01-05 MAS apenas os arquivos em src que não existem em nenhum lugar dentro de dst .

Exemplo

Suponha que a situação inicial seja

src/f1.txt
src/f2.txt
src/f3.txt

dst/2016-01-04/f1.txt
dst/2016-01-05/f0.txt

Depois de fazer a cópia, a situação final deve ser:

src/f1.txt
src/f2.txt
src/f3.txt

dst/2016-01-04/f1.txt
dst/2016-01-05/f0.txt

dst/2016-01-05/f2.txt
dst/2016-01-05/f3.txt

Em geral, não gostaria de substituir os arquivos existentes. Mesmo que a fonte esteja atualizada.

    
por Dennis Jaheruddin 05.01.2016 / 13:36

1 resposta

1

O seguinte deve fazer o truque: -

today='date +%Y-%m-%d'
ls -A src/ | while f='line'; do if [ ! -f "dst/*/$f" ]; \
                 then mkdir -p "dst/$today"; cp "src/$f" "dst/$today/$f"; fi; done

Notas: -

  1. Comparado com a alternativa de for f in src/*; ... , usar ls retira o diretório do nome da fonte e -A inclui nomes de arquivos que começam com . ,.
  2. Se houver subdiretórios em src/ , você precisará usar find no diretório de origem e remover src/ do nome com -printf %P\n .
  3. Se você não tiver o comando line , poderá usar while read f; ... , mas isso não funcionará para nomes de arquivos com espaço em branco inicial e final (mesmo line falhará se o nome do arquivo contiver uma nova linha caractere - para isso você precisaria usar find -print0 e xargs -0 ).
por 05.01.2016 / 16:41

Tags