Копировать структуру каталогов без копирования файлов в Mac OS X
Я хотел бы продублировать структуру каталогов из одного каталога в другой без копирования каких-либо реальных файлов. Вместо файлов я хотел бы либо пустой файл с тем же именем, либо символическую ссылку на исходное местоположение.
Как я мог сделать это на OS X? Инструменты командной строки (rsync/find/tar/ что угодно), сценарии оболочки и т. Д. - все приемлемо, программное обеспечение, которое я должен купить, вероятно, нет.
5 ответов
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/{} \;
Пытаться 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.
Другое решение, которое работает для меня, это использовать rsync
и исключить все файлы, например
$ rsync -a /path/from/ /path/to/ --include \*/ --exclude \*
--include \*/
указывает, что все каталоги должны быть скопированы, и --exclude \*
указывает, что все файлы должны быть исключены из копии.
Прелесть этого в том, что новая иерархия каталогов имеет те же атрибуты, временные метки, разрешения и т. Д., Что и оригинал.
Вот еще один вариант rsync
метод, который будет хранить значки папок и метки поиска:
rsync -Ea /path/from/ /path/to/ --include="*/" --include="Icon*" --exclude="*"
Это не копирует псевдонимы файлов, поэтому вы можете объединить их с ответом whitequark выше.
This will find the directories inside temp, remove the leading /home/bryan/ from them and create the new directories
for i in `find /home/bryan/temp -type d| sed 's/\/home\/bryan\///g'`
do mkdir $i
done
Я предлагаю вводить в коде одну строку за раз (таким образом, точки с запятой (не показаны) будут размещены правильно)