Копировать файлы и каталоги без содержимого файлов

18

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

Буду благодарен за любую помощь.

dagi12
источник

Ответы:

36

Из man cp

--attributes-only не копировать данные файла, только атрибуты

Итак, если вы хотите скопировать все папки и файлы, которые находятся в somedirectory

делать cp -R --attributes-only somedirectory destinationdirectory

Сергей Колодяжный
источник
Это именно то, что мне нужно. Большое спасибо.
dagi12
4
+1 потому что я не думал, что кто-то уже реализовал это - очень удивился.
mgarciaisaia
@mgarciaisaia Я был просто удивлен, как и ты, когда я сегодня утром проверил страницу руководства =)
Сергей Колодяжный
10

Приятно, что в 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/{} \;
Alexis
источник