Faça arquivos rsync move (não copiar) no sistema de arquivos local

3

Posso fazer rsync mover uma grande quantidade de arquivos em vez de copiá-los quando estiver no sistema de arquivos local? Eu gostaria que ele se comportasse como um comando mv aprimorado. Eu sei sobre --remove-source-files opção mas manual não diz nada se ele realmente move arquivos (desejado) ou apenas cópias e, em seguida, excluir (não desejado).

Editar O que eu quero alcançar é que rsync (mv melhorado) mova arquivos para diretórios que fundem diretórios existentes - o mesmo que rsync -r mas movendo não copiando, por exemplo,

$ tree d1 d2
d1
├── b
├── c
├── d
├── deep_house
│   └── dh1
└── sound
    └── sss
d2
├── a
└── deep_house
    └── dddx

3 directories, 7 files
$ rsync -r d1/ d2
$ tree d2
d2
├── a
├── b
├── c
├── d
├── deep_house
│   ├── dddx
│   └── dh1
└── sound
    └── sss
    
por Trismegistos 12.04.2015 / 11:17

2 respostas

3

O Rsync copia arquivos. É o que isso faz. Mesmo se você disser para remover os arquivos de origem, ele ainda os copia primeiro, nunca os move, mesmo quando o destino estiver no mesmo sistema de arquivos.

O utilitário mv do GNU coreutils tem uma opção -u para mover arquivos somente se o destino for mais antigo que a origem ou ainda não existir. Isso é semelhante ao -u do rsync.

Se você quiser mover uma árvore de diretórios para uma existente, você pode usar uma travessia recursiva que chame mv em cada arquivo. Se você não quiser substituir arquivos existentes:

cd d1
find . -depth -exec sh -c 'test -e "../d2/$0" || mv "$0" "../d2/$0"' {} \;

Se você quiser substituir os arquivos existentes, precisará distinguir entre os diretórios existentes e outros arquivos e decidir o que fazer quando a origem tiver um arquivo regular em que o destino tenha um diretório.

    
por 13.04.2015 / 02:35
2

rsync copia arquivos, nunca os move.

As combinações de find e mv provavelmente farão o que você deseja.

    
por 12.04.2015 / 11:24