O que você quiser, não consigo pensar em uma maneira de fazer isso apenas com o rsync.
Se você realmente deseja ignorar completamente os diretórios que existem no lado do destino, o teste não é recursivo, apenas o diretório ou diretórios de nível superior são importantes. Para cada argumento a ser copiado ( dirN
in rsync --flag-that-you-hope-exists dir1 dir2 dir3 destination/
), o diretório existe no lado de destino e não há nada para fazer, ou o diretório de origem não existe e você deseja copiá-lo inteiro.
cd /path/to/source
for x in dir1 dir2 dir3; do
[ -e "/path/to/target/$x" ] || cp -Rp -- "$x" /path/to/target/
done
Se você realmente quiser recorrer a diretórios que existem no lado de destino e copiar somente arquivos quando um diretório estiver faltando, aqui está um método usando find
para percorrer o diretório de origem e verificar cada diretório de destino correspondente.
cd /path/to/source
find . -type d -exec sh -c '
if [ -e "$0/$1" ]; then exit 0; fi
cp -Rp -- "$1" "$0/$1"
exit 1
' /path/to/target {} \; -prune
Se a origem ou o destino for remoto, monte-o com SSHFS .