for d in 2017/01/01/01/*; do mkdir -p /path/to/backup/`dirname $d`; tar -czf /path/to/backup/$d.tgz $d &; echo $! >> pids.txt; done
Дальше проверять в цикле по файлу pids.txt, завершились ли процессы, и потом удалять. Но это вариант не очень - сложный и ненадежный: невозможно будет сказать, успешно ли заархивировалась папка или нет.
В первом случае можно хотя бы сделать tar -czf /path/to/backup/$d.tgz $d && rm -rf $d
Да и вряд ли скорости добавит, все в диск упрется.
А $user - это что?
Вообще, нет проблем с хранением объектов в сессии, если их можно сериализовать. А с сериализацией могут быть вопросы, если объект зависит от ресурсов (открытые файлы, соединения с БД). Например, если ваш $user такой хитрый, что при обращении к полю login он в фоне вытаскивает его с БД.