Я хотел бы копировать структуру каталогов в некотором каталоге другому, не копируя фактических файлов. Вместо файлов я хотел бы или пустой файл с тем же именем или символьную ссылку на исходное местоположение.
Как я мог сделать это на OS X? Инструменты командной строки (rsync/find/tar/whatever), сценарии оболочки, и т.д., все приемлемы, программное обеспечение, которое я должен купить, вероятно, не.
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 \*
указывает, что все файлы должны быть исключены из копии.
Красота этого состоит в том, что новая иерархия каталогов имеет те же атрибуты, метки времени, полномочия, и т.д. как оригинал.
Это найдет каталоги во временном файле, удалит продвижение/home/bryan/от них и создаст новые каталоги
for i in `find /home/bryan/temp -type d| sed 's/\/home\/bryan\///g'`
do mkdir $i
done
Я предлагаю ввести в коде одну строку за один раз (этот способ, которым точки с запятой (не показанный) будут помещены правильно),