Soluzione 1:
Rimuovi *
. Come accennato nelle pagine man di rsync, il file --delete
l'opzione non funziona con i caratteri jolly.
Usa invece questo:
rsync -a --delete $DIR1/ $DIR2/
"--deleteQuesto indica a rsync di eliminare i file estranei dal lato di ricezione (quelli che non si trovano sul lato di invio), ma solo per le directory che vengono sincronizzate. Devi aver chiesto a rsync di inviare l'intera directory ( ad esempio dir
o dir/
) senza utilizzare un carattere jolly per i contenuti della directory (ad es. dir/*
) poiché il carattere jolly viene espanso dalla shell e rsync riceve quindi una richiesta per trasferire singoli file, non la directory principale dei file. I file esclusi dal trasferimento sono esclusi anche dall'eliminazione a meno che non si utilizzi il --delete-excluded
o contrassegnare le regole come corrispondenti solo sul lato di invio (vedere i modificatori di inclusione/esclusione nella sezione REGOLE DI FILTRO)."
Soluzione 2:
Il motivo è perché stai chiamando rsync su /tmp/1/b, che non considererà affatto il file /tmp/1/a.
La tua intenzione sembra essere quella di rsync la directory /tmp/1/ -- se usi "/tmp/1/" come sorgente piuttosto che i singoli file, noterà che "a" è stato cancellato dalla directory e rimuoverà dal bersaglio.
Soluzione 3:
Se modifichi la seconda riga rsync in rsync -a --delete $DIR1/ $DIR2
(senza *) funzionerà. Il motivo è che la shell espande il *
ai nomi dei file nella prima directory, che è solo b nel tuo caso, quindi il file mancante a non sarà considerato affatto da rsync, poiché il comando che viene eseguito è in realtà rsync -a --delete $DIR1/b $DIR2
.