7

Я хотел бы продублировать структуру каталогов из одного каталога в другой без копирования каких-либо реальных файлов. Вместо файлов я хотел бы либо пустой файл с тем же именем, либо символическую ссылку на исходное местоположение.

Как я мог сделать это на OS X? Инструменты командной строки (rsync/find/tar/ что угодно), сценарии оболочки и т.д. - все приемлемо, программное обеспечение, которое я должен купить, вероятно, нет.

5 ответов5

10
user@osx:~/from$ find . -type d -exec mkdir -p ~/to/{} \;
user@osx:~/from$ find . -type f -exec ln -s ~/from/{} ~/to/{} \;

или же

user@osx:~/from$ find . -type f -exec touch ~/to/{} \;
7

Попробуй lndir . С его справочной страницы:

The lndir program makes  a  shadow  copy  todir  of  a  directory  tree
fromdir,  except  that  the shadow is not populated with real files but
instead with symbolic links pointing at the real files in  the  fromdir
directory tree.
4

Другое решение, которое мне подходит, - это использовать rsync и исключить все файлы, например

$ rsync -a /path/from/ /path/to/ --include \*/ --exclude \*

--include \*/ указывает, что все каталоги должны быть скопированы, а --exclude \* указывает, что все файлы должны быть исключены из копии.

Прелесть этого в том, что новая иерархия каталогов имеет те же атрибуты, временные метки, разрешения и т.д., Что и оригинал.

1

Вот еще один вариант метода rsync , который будет хранить значки папок и метки поиска:

rsync -Ea /path/from/ /path/to/ --include="*/"  --include="Icon*" --exclude="*"

Это не копирует псевдонимы файлов, поэтому вы можете объединить их с ответом whitequark выше.

0

Это найдет каталоги внутри temp, удалит из них ведущий /home /bryan / и создаст новые каталоги.

  for i in `find /home/bryan/temp -type d| sed 's/\/home\/bryan\///g'`
  do mkdir $i
  done

Я предлагаю вводить в коде одну строку за раз (таким образом, точки с запятой (не показаны) будут размещены правильно)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .