Как скопировать избранные файлы вместе со структурой каталогов
Иногда необходимо скопировать выборочные файлы вместе со всей структурой каталогов.
На помощь приходит команда cpio!Простой пример:
find /source_path | cpio -pdmuv /dest_path
где:
find /source_path – формируем на вход список файлов для копирования. Можно выдать уже подготовленный список из какого-либо файла, можно выдать из большого конвейера с обработчиками имен и т.д.
cpio -pdmuv /dest_path – копируем файлы, пришедшие в stdin в папочку /dest_path, здесь опции означают:
-p – читать список имен файлов из стандартного потока (stdin)
-d – при необходимости создавать каталоги
-m – время изменения файла делать как у источника
-u – если такие файлы уже существуют, то затереть их
-v – вывести в стандартный вывод (stdout) список копируемых файлов
cpio создает полные пути, как они ему и пришли на вход. т.е. если вы на вход подаете /aaa/bbb/ccc, то в результате получите /dest_path/aaa/bbb/ccc
По-этому используйте относительные пути (начинаются с символа точки . ), а не абсолютные.
Для абсолютных путей, можно использовать под-оболочку:
(cd /source_path; find . | cpio -pdmuv /dest_path)
Здесь cd – изменяет текущей каталог, но так как это делается в подоболочке, то при выходе из нее текущий каталог остается прежним.