Приятно, что в Ubuntu cpесть эта функция, но если вы окажетесь на машине, которая этого не делает ( cpнапример, в стиле BSD нет, как и OS X), это очень легко сделать find. Вот он как двухслойный (для удобства чтения):
% cd original_dir
% find . -type d -exec mkdir -p ../copy_dir/{} \;
% find . -type f -exec touch ../copy_dir/{} \;
Если он copy_dirуже существует, вы можете пропустить -pаргумент, mkdirпоскольку он findбудет проходить по дереву каталогов сверху вниз. Для больших рабочих мест, вы можете сбрить еще миллисекунды или так, прекратив команды с +вместо того , чтобы, \;если ваш findподдерживает его (это , вероятно , делает).
Редактировать: вышеприведенные команды не обрабатываются для обработки символических ссылок, которые могут быть скопированы с третьим прогоном find( не заканчивайте эту с +):
% find . -type l -exec cp -R {} ../copy_dir/{} \;