Řešení 1:
 Odstraňte * . Jak je uvedeno v manuálových stránkách rsync --delete volba nefunguje se zástupnými znaky.
Místo toho použijte toto:
rsync -a --delete $DIR1/ $DIR2/
 
 "--deleteThis říká rsync, aby smazal nadbytečné soubory ze strany příjemce (ty, které nejsou na straně odesílatele), ale pouze pro adresáře, které se synchronizují. Museli jste požádat rsync o odeslání celého adresáře ( např. dir nebo dir/ ) bez použití zástupného znaku pro obsah adresáře (např. dir/* ), protože zástupný znak je rozbalen shellem a rsync tak dostane požadavek na přenos jednotlivých souborů, nikoli nadřazeného adresáře souborů.  Soubory, které jsou vyloučeny z přenosu, jsou také vyloučeny z odstranění, pokud nepoužijete --delete-excluded nebo označte pravidla jako vyhovující pouze na straně odesílatele (viz modifikátory zahrnout/vyloučit v sekci FILTROVAT PRAVIDLA)."
Řešení 2:
Důvodem je to, že voláte rsync na /tmp/1/b, který nebude brát v úvahu soubor /tmp/1/a.
Zdá se, že vaším záměrem je rsyncovat adresář /tmp/1/ -- pokud jako zdroj použijete "/tmp/1/" místo jednotlivých souborů, všimne si, že "a" bylo smazáno z adresáře a odstraní to z cíle.
Řešení 3:
 Pokud změníte druhý řádek rsync na rsync -a --delete $DIR1/ $DIR2 (bez *) to bude fungovat. Důvodem je, že shell rozšiřuje * na názvy souborů v prvním adresáři, což je ve vašem případě pouze b, takže chybějící soubor a rsync vůbec nezohlední, protože příkaz, který se provede, je ve skutečnosti rsync -a --delete $DIR1/b $DIR2 .